Dockerfile和dev / test / prod环境

时间:2015-01-27 11:10:29

标签: docker boot2docker dockerfile

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

我在尝试:

  • 创建三个不同的docker文件(不起作用,因为dockerfile需要命名为Dockerfile并且位于上下文根目录
  • 找到一种将参数传递给docker build命令的方法 - 找不到
  • 使用ONBUILD命令 - 我创建了一个主文件和三个特定的文件,它们将特定的conf文件复制到图像中的同一目录中(由于与第一点相同的原因,它不起作用)
  • 从stdin传递docker文件 - 它不起作用,因为那时没有上下文(所以我不能使用ADD / COPY命令)

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

3 个答案:

答案 0 :(得分:5)

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

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

您可以使用docker run -it -e mytag=abc123 ubuntu:latest env | grep mytag显示mytag=abc123

来检查该环境变量是否可用

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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 .