扩展Docker Compose
引用一个现成的基于部署或非部署的 docker-compose.yml 文件有一些潜在缺点。
比如:
1、如果某个容器的入口关闭的话,Docker Compose 会关闭这个容器。如果你要做调试,并反复重启的话,这样会很麻烦。
2、你可能会想要把本地文件系统映射到容器中,或者是暴露端口给其它资源,比如想要访问数据库。
3、你可能会想要把本地 .ssh 文件夹的内容拷贝进容器,或者是设置 ptrace 选项。见 《一起学Docker20:打造自己的 Docker 开发容器之 Docker Compose》一文。
你可以通过多个 docker-compose.yml 文件来覆盖或补充最基础的 yml 文件,来扩展完整的 Docker Compose 配置,以解决这些问题。
比如,有这样一个额外的 yml 文件 —— .devcontainer/docker-compose.extend.yml 文件:
如果需要的话,这个文件还可以提供额外的设置,比如端口映射等。怎么使用它呢?按照顺序,在 devcontainer.json 中引用原来的 docker-compose.yml 文件和 .devcontainer/devcontainer.extend.yml 文件。
之后,在启动容器的时候,VS Code 就会自动使用这2个文件了。你也可以自己从命令行启动它们:
尽管 postCreateCommand 属性能够让你在容器内部安装额外的工具,有时候你可能想要一个专门的 Dockerfile 用于开发。你也可以使用同样的方式,来引用一个专门用于开发的自定义 Dockerfile 而不修改现有的 Docker Compose 文件。比如,你可以像这样更新 .devcontainer/devcontainer.extend.yml :
彩蛋:在 Docker Compose 中使用 localhost
和 Docker 文档所说的一样,你也可以往 docker-compose.yml 文件中添加其它服务。不过,如果你想要新加的服务中运行的东西,能够被 localhost 上的容器访问到,或者想要本地转发服务的话,需要确保在服务配置中加入了以下红框内容:
矻矻划重点:
1、卷绑定是根据 devcontainer.json 中,dockerComposeFile 属性列表的第一个文件位置确定的。
2、Rust 需要用到 ptrace 调试器,所以要做额外配置。
如果喜欢这篇文章,欢迎长按点赞支持!另外,记得关注,下期更加精彩。我们下期,不见不散。
推荐文章: