What is the best way to build a Docker image with dynamic parameters that can change
Hello,
When you run a container, you can populate the environment with whatever you need to:
$ docker run -e FOO=bar busybox env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b128e8fc7e0f
FOO=bar
HOME=/root
If you are asking about how to parameterize the build step at build time, there is actually a new feature in 1.9 that does this. It’s called ARG: https://github.com/docker/docker/blob/master/docs/reference/builder.md#arg
That means I can take my Dockerfile:
FROM busybox:latest
ARG foo=bar
ENV bing=$foo
CMD echo $bing
now I can build the image: docker build -t darg .
and run it: docker run darg
and get bar
as the output. If I build it differently: docker build --build-arg foo=baz -t darg .
and run it the same way, I’ll get baz
as the output.
The CMD line doesn’t directly interpret an ARG, so that’s why there is an intermediate ENV option that does consume the ARG.
Cheers!