Dockerfile 和 dev/test/prod 环境
Dockerfile and dev/test/prod environment
我想创建能够构建三个不同图像(目前一个)的 Dockerfile。这些映像仅在配置文件中有所不同。
我正在尝试:
- 创建三个不同的 docker 文件(不起作用,因为 dockerfile 需要命名为 Dockerfile 并位于上下文 root
- 正在寻找一种将参数传递给 docker 构建命令的方法 - 未找到
- 使用 ONBUILD 命令 - 我创建了一个主文件和三个特定的文件,它们将特定的 conf 文件复制到映像中的同一目录中(由于与第一点相同的原因,它不起作用)
- 从 stdin 传递 docker 文件 - 它不起作用,因为那时没有上下文(所以我不能使用 ADD/COPY 命令)
我必须说我 运行 没有想法:/ 你如何处理这种情况。在我看来这应该是一个普遍的问题。
为什么不在 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 .
我想创建能够构建三个不同图像(目前一个)的 Dockerfile。这些映像仅在配置文件中有所不同。
我正在尝试:
- 创建三个不同的 docker 文件(不起作用,因为 dockerfile 需要命名为 Dockerfile 并位于上下文 root
- 正在寻找一种将参数传递给 docker 构建命令的方法 - 未找到
- 使用 ONBUILD 命令 - 我创建了一个主文件和三个特定的文件,它们将特定的 conf 文件复制到映像中的同一目录中(由于与第一点相同的原因,它不起作用)
- 从 stdin 传递 docker 文件 - 它不起作用,因为那时没有上下文(所以我不能使用 ADD/COPY 命令)
我必须说我 运行 没有想法:/ 你如何处理这种情况。在我看来这应该是一个普遍的问题。
为什么不在 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 .