Dockerfile 和 dev/test/prod 环境

Dockerfile and dev/test/prod environment

我想创建能够构建三个不同图像(目前一个)的 Dockerfile。这些映像仅在配置文件中有所不同。

我正在尝试:

我必须说我 运行 没有想法:/ 你如何处理这种情况。在我看来这应该是一个普遍的问题。

为什么不在 Dockerfile 中复制所有 3 个配置文件,然后 docker run -e config=file1(或 file2 或 file3)并使用配置环境变量的值来获取所需的配置文件。查看文档 http://docs.docker.com/reference/commandline/cli/#run

也可以使用docker run命令的--env-file=[] Read in a line delimited file of environment variables

您可以检查环境变量是否可用 docker run -it -e mytag=abc123 ubuntu:latest env | grep mytag 显示 mytag=abc123

如果您想要 3 个不同的图像,请使用 3 个不同的 Dockerfile。命名问题很烦人,但您可以编写一个帮助脚本来简单地复制文件并调用 docker build 例如

cp Dockerfile-cfg1 Dockerfile
docker build -t "cfg1" .
cp Dockerfile-cfg2 Dockerfile
docker build -t "cfg2" .

然而,正如@user2915097 所建议的那样,更好的解决方案可能是使用单个图像并在 运行 时选择配置。这意味着更少的照顾和维护多个图像的开销。

我添加了三个不同的文件:

test.Dockerfile
dev.Dockerfile
prod.Dockerfile

我有 运行 他们使用文件名:

docker build -t name/name -f test.Dockerfile .
docker build -t name/name -f dev.Dockerfile .
docker build -t name/name -f prod.Dockerfile .