Dockerfile and dev/test/prod environment

2019-01-24 17:57发布

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.

2条回答
Emotional °昔
2楼-- · 2019-01-24 18:41

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.

查看更多
Viruses.
3楼-- · 2019-01-24 18:44

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

查看更多
登录 后发表回答