Dockerfile和dev / test / prod环境

我想创buildDockerfile,它将能够build立三个不同的图像(目前一个)。 这些图像仅在configuration文件中有所不同。

我正在尝试:

  • 创build三个不同的docker文件(不起作用,因为docker文件需要命名为Dockerfile,并在上下文根
  • find一个方法将parameter passing给docker build命令 – 没有find
  • 使用ONBUILD命令 – 我创build了一个主文件和三个特定的复制特定的conf文件到图像中的同一个目录(它不起作用,因为与第一点相同的原因)
  • 从stdin传递docker文件 – 它不工作,因为没有上下文然后(所以我不能使用ADD / COPY命令)

我必须说,我已经没有想法了:/你如何处理这种情况。 我认为这应该是一个普遍的问题。

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

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

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

如果你想要3个不同的图像,使用3个不同的Docker文件。 命名的问题是烦人的,但你可以写一个助手脚本,只是复制文件和调用docker build例如

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

然而,正如@ user2915097所build议的,一个更好的解决scheme可能只有一个图像,并在运行时selectconfiguration。 这意味着更less的照顾和维护多个图像的开销。