Dockerfile and dev/test/prod environment

China☆狼群 提交于 2019-12-18 04:23:12

问题


I want to create Dockerfile that will be able to build three different images (one at the moment). Those images differs only in configuration files.

I was trying:

  • creating three different docker files (doesn't work because dockerfile needs to be named Dockerfile and be in context root
  • finding a way of passing parameters to docker build command - didn't find
  • using ONBUILD command - I created one main file and three specific ones which were copying specific conf file into same directory in image (it doesn't work because of the same reason as in first point)
  • passing docker file from stdin - it doesn't work because there is no context then (so I can't use ADD/COPY commands then)

I must say I run out of ideas:/ How do you handle that situation. In my opinion it should be a common issue.


回答1:


Why not copy in your Dockerfile all 3 config files, and then docker run -e config=file1 (or file2 or file3) and use the value of config environment variable to get the required config file .Check the doc http://docs.docker.com/reference/commandline/cli/#run

You can also use the --env-file=[] Read in a line delimited file of environment variables of the docker run command.

You can check that environment variable is available with docker run -it -e mytag=abc123 ubuntu:latest env | grep mytag shows mytag=abc123




回答2:


If you want 3 different images, use 3 different Dockerfiles. The naming issue is annoying, but you can write a helper script that simply copies files and calls docker build e.g.

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

However, as @user2915097 suggests, a better solution is probably to have a single image and choose the config at run-time. This means less overhead of looking after and maintaining multiple images.



来源:https://stackoverflow.com/questions/28169098/dockerfile-and-dev-test-prod-environment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!