我应该把 docker-compose.yml 放在哪里
Posted
技术标签:
【中文标题】我应该把 docker-compose.yml 放在哪里【英文标题】:where should I put docker-compose.yml 【发布时间】:2017-11-30 17:35:33 【问题描述】:当我从 docker hub 拉取图像时。有时,我想以多容器的方式运行图像。所以我选择使用 docker-compose。例如,我会在replicated mode 中运行zookeeper。我将新建一个名为 docker-compose.yml 的文件,然后运行 docker-compose up 并等待它完全初始化。
我的问题是我应该将 docker-compose.yml 文件放入什么目录?
【问题讨论】:
没关系。一个好的方法是创建一个项目目录,在其中为每个 docker-compose 项目创建一个新目录。例如:project/app-mysql/
,您可以在那里保存您的docker-compose.yaml
(其中包括您的应用程序 + mysql 的设置)。这就是我们使用它的方式。
@lvthillo,在这种情况下,您的 git 存储库目录应该在哪里?在app-mysql/
中(每个app-xxx 一个)或project/
中的所有项目只有一个git repo?
@Kwadz 这个问题对我来说并不完全清楚,但我会将 docker-compose.yml 保留在我的 git repo 的根目录中,并尽可能创建单独的 repo。如果不可能,我会使用带有子文件夹的 git root 并在每个子存储库中放置一个 docker-compose.yml
【参考方案1】:
我也在问自己同样的问题:我的docker-compose.yml
文件放在哪里?
我决定采用以下方式:
docker-compose.yml
的一个存储库以及部署脚本(在我的例子中是 Jenkins 管道)。
每个微服务一个 Repo 以及一个 Dockerfile 及其构建逻辑(构建的映像被推送到私有 Docker 注册表)。
为什么?
docker-compose.yml
描述了一个系统(微服务的组成)及其部署方式。
微服务应独立于系统基础架构。
可能有多个系统(微服务的不同组合)和第二个 docker-compose.yml
(和 Repo)。
但是,当然也有合理的例外。 假设您正在部署一个定制的数据库以及一个管理工具(例如定制的 mariadb 和 adminer),那么大多数东西可能存在于一个存储库中。
【讨论】:
还可以考虑使用 git 子模块。我发现自己有一个带有 docker-compose.yml 的“超级项目”,用于启动整个开发环境,然后在一个名为 /services/ 的文件夹中,我为我运行的每个服务都有子模块,并且可以保持版本控制其中管理。通过这种方式,超级项目可以拥有“功能 A”的分支,并将正确的子模块指向他们成功实现“功能 A”所需的任何提交。【参考方案2】:我更喜欢将它们全部放在一个地方。我通常将它们放在 resources 文件夹中,以使它们与我的基本代码保持同步并安装脚本。所以你可以有不同的分支或文件夹来满足不同的需求或系统。
为什么?
docker-compose.yml
文件不一定描述整个系统和系统的部署计划。他们通过使用dockerbuild
文件(因为描述基本映像和环境)来参与此角色您已经在主存储库中。
使用环境变量和其他相关资源将部署和基础架构计划与 docker-compose.yml 逻辑分开是一种很好的做法,可以防止为不同环境维护大量 docker-compose.yml 文件。
【讨论】:
以上是关于我应该把 docker-compose.yml 放在哪里的主要内容,如果未能解决你的问题,请参考以下文章