我应该把 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 放在哪里的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 与 AMI2 和 docker-compose.yml

Docker-Compose.yml配置讲解

如何验证我的 docker-compose.yml?

向 docker-compose.yml 公开随机端口

如何正确组合这个 docker-compose.yml?

Google Cloud Run 中的 docker-compose.yml