I'm confused about when should I use CMD
vs RUN
. For example, to execute bash/shell commands (i.e. ls -la
) I would always use CMD
or is there a situation where I would use RUN
? Trying to understand the best practices about these two similar Dockerfile
directives.
RUN is an image build step, the state of the container after a RUN
command will be committed to the container image. A Dockerfile can have many RUN
steps that layer on top of one another to build the image.
CMD is the command the container executes by default when you launch the built image. A Dockerfile will only use the final CMD
defined. The CMD
can be overridden when starting a container with docker run $image $other_command
.
ENTRYPOINT is also closely related to CMD
and can modify the way a CMD
is interpreted when a container is started from an image.