【发布时间】:2021-12-18 20:14:42
【问题描述】:
对于我所有的图像,我都有一个用于生产的latest 标签,以及一个用于测试的test。我还有 2 个 docker-compose 文件,它们的不同之处在于一个在所有包(nginx 除外)上使用 latest,而另一个使用 test。有没有办法通过 CLI 变量进行设置,这样我就不必一直手动保持这两个文件同步?
【问题讨论】:
标签: docker docker-compose
对于我所有的图像,我都有一个用于生产的latest 标签,以及一个用于测试的test。我还有 2 个 docker-compose 文件,它们的不同之处在于一个在所有包(nginx 除外)上使用 latest,而另一个使用 test。有没有办法通过 CLI 变量进行设置,这样我就不必一直手动保持这两个文件同步?
【问题讨论】:
标签: docker docker-compose
我们可以通过环境变量来处理这个问题。
docker-compose.yml:
services:
...
my-service-one:
image: my/service-one:$TAG
...
my-service-two:
image: my/service-two:$TAG
...
然后我们可以添加带有内容的.env file(用于生产)
TAG=latest
和一个带有内容的test.env 文件(用于测试)
TAG=test
当我们运行docker compose up时,默认使用文件.env。如果我们想开始我们的测试部署,我们可以运行docker compose --env-file test.env up。
【讨论】:
.env 文件是默认文件。
您可以简单地为每个撰写文件运行这些命令
TAG=latest docker-compose -p latestapp -f compose-for-latest.yaml up -d
和
TAG=test docker-compose -p testapp -f compose-for-test.yaml up -d
当然,不要忘记使用${TAG} 或$TAG 在撰写文件中指定您想在何处使用标签变量(两者都有效)
如果您是 LINUX 用户,这应该可以正常工作。
如果您是 WINDOWS 用户并且命令不起作用,您可以改用 GIT BASH。
【讨论】: