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.
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.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.
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/#runYou can also use the
--env-file=[] Read in a line delimited file of environment variables
of thedocker run
command.You can check that environment variable is available with
docker run -it -e mytag=abc123 ubuntu:latest env | grep mytag
showsmytag=abc123