Run commands
The Run syntax to run in the shell at image build time.
See the Command or Entry sections for changing what a container executes.
Run
RUN docs reference.
The RUN instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the Dockerfile.
Two forms:
- Shell form.
RUN command - Exec form.
RUN ["executable", "param1", "param2"]
e.g.
RUN foo bar
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
Note that the exec form is parsed as a JSON array, which means that you must use double-quotes (“) around words not single-quotes (‘).
RUN ["boo", "bar"]
RUN ["/bin/bash", "-c", "echo Hello"]
# You must use the subshell in exec form to evaluate variables.
RUN [ "sh", "-c", "echo $HOME" ]
Command
See CMD doc reference.
The main purpose of a CMD is to provide defaults for an executing container.
There can only be one CMD instruction in a Dockerfile - only last is used.
The CMD instruction has three forms:
- Exec form - preferred.
CMD ["executable", "param1", "param2"] # (exec form, this is the preferred form) - Shell form:
CMD command param1 param2
Arguments
ARG doc reference.
Set a build-time arg.
$ docker build --build-arg <varname>=<value>
ARG <name>[=<default value>]
Example:
FROM busybox
ARG user1
ARG buildno
# ...
Using ARG and FROM together, based on the docs.
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app
FROM extras:${CODE_VERSION}
CMD /code/run-extras
Entrypoint
An ENTRYPOINT allows you to configure a container that will run as an executable.
- Exec form - preferred.
ENTRYPOINT ["executable", "param1", "param2"] - Shell form.
ENTRYPOINT command param1 param2
Set default parameters for ENTRYPOINT:
CMD ["param1", "param2"]