Docker Compose

未匹配的标注

有时候,只有一个容器环境是不够的。比如说,你想往你的配置添加另一个复杂组件,比如添加一个数据库。你可以直接往 Dockerfile 里添加,也可以通过增加一个额外的容器来实现复杂组件的添加。遥想当年,我在做前端开发的时候,想要和后端做联调。当时没有调试环境,每个前端基本上都是在自己的机器上配置一个后端环境的。我当时用的是MAC系统,和其他同事的操作系统不一样,找后端同事装后端环境,愣是半天没装上,还耽误了同事的工作。但是现在有了支持 Docker Compose 的 Remote - Containers 插件,管理多同容器配置实在是变得太简单了!

有以下几个选项来配置 Docker Compose:

1、使用已经定义了服务的,现成的,未修改的 docker-compose.yml 文件

2、新建一个 docker-compose.yml 或者复制一个现成的文件,用来开发服务

3、扩展现有的 Docker Compose 配置来开发服务

4、单独开一个 VS Code 窗口来一次性搞定多个 Docker Compose 定义的服务

注意:使用 Alpine Linux 容器的时候,一些插件可能会因为插件中原生的 glibc 依赖而无法运行。

可以配置 VS Code 来自动启动 Docker Compose 文件中特定服务所需的所有容器。如果你已经通过命令行启动了所配置的容器,VS Code 会自动连接所指定的运行中的服务。这样一来,前几篇文章讲到的 Docker 镜像和 Dockerfile 工作流快速配置的优点,在多容器工作流程中,一样可以获得。即便是你更喜欢用命令行也没关系。

想要快速入门的话,可以在 VS Code 中打开要用的文件夹,可以在 Command Palette 中运行 Remote-Containers: Add Development Container Configuration Files 命令。

如果当前打开的路径中,存在 docker-compose.yml 文件的话,会询问你是否选择一个现成的 Docker Compose 文件,或者选择一个预定义的容器配置,这些配置来自于 vscode-dev-containers 仓库,插件会根据你的文件夹内容,生成一个可过滤列表让你选择。这些开发容器定义中,有很多都使用了 Dockerfile ,所以可以从下面几个选项中,选择一个,作为 Docker Compose 的起点:

1、Existing Docker Compose

2、Node.js & MongoDB

3、Python & PostgresSQL

4、Docker-from-Docker Compose

选择完毕后,VS Code 会把合适的 .devcontainer/devcontainer.json 或 devcontainer.json 文件添加到文件夹中。

你也可以手动创建配置。如果要复用一个没改过的 Docker Compose ,可以在 .devcontainer/devcontainer.json 文件中使用 dockerComposeFile 和 service 属性。

比如:

要查询其它,如 workspaceFolder 和 shutdownAction 属性的信息的话,可以在 devcontainer.json 参考手册中找到。

在把 .devcontainer/devcontainer.json 文件添加到文件夹中后,在 Command Palette 中运行 Remote-Containers: Reopen in Container *或者 如果还没有在容器中的话,运行 *Remote-Containers: Open Folder in Container 命令。

如果容器还没运行,这个例子中,VS Code 会调用 docker-compose -f ../docker-compose.yml up命令。service 属性表示 VS Code 应该连接 Docker Compose 中的哪个服务。

你也可以创建 Docker Compose 文件的开发拷贝。比如,如果你已经有了一个文件:.devcontainer/docker-compose.devcontainer.yml ,只要在 devcontainer.json 文件中,修改下面这行:

“dockerComposeFile”: “docker-compose.devcontainer.yml”

不过呢,更好的方式是用另一个文件对 Docker Compose 文件进行扩展,而不是去拷贝它。我们会在之后的 《扩展Docker Compose 文件》 一文中,谈到这一点。

如果默认的容器命令执行失败或执行完毕并退出,为了避免容器关闭,你可以修改 devcontainer.json 中所指定的服务的 Docker Compose 文件:

我们也可以参考 VS Code 仓库提供的范例 docker-compose.yml 文件:

如果你还没有绑定源代码的,可以使用 Docker Compose 文件的卷列表,把本地源代码绑定挂载到容器中。比如:

不过,在 Linux 上,使用绑定挂载的时候,可能需要设置并指定一个非 root 用户,不然你创建的所有文件都会是 root 权限的。详细内容参考 《给你的开发容器添加一个非 root 用户》一文。要让 VS Code 换一个用户运行的话,在 devcontainer.json 中,添加这行:

如果你不为开发环境创建自定义的 Dockerfile ,遇到需要在服务容器内部安装其它开发工具,比如 curl 的时候,尽管不如把这些工具添加进容器镜像来得高效,你也可以使用 postCreateCommand 属性来完成这个任务。

具体参见我之前的文章。

如果你的应用使用 C++, Go 或 Rust 等使用基于 ptrace 的调试器进行构建,你需要在 Docker Compose 文件中添加以下内容:

第一次创建容器后,你需要运行 Remote-Containers: Rebuild Container 命令让 devcontainer.json,Docker Compose 文件,或 Dockerfile 相关文件中的更新生效。

如果喜欢我的文章,欢迎点赞、转发和评论。我们下一期不见不散。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
秦晓武
讨论数量: 0
发起讨论 只看当前版本


暂无话题~