RUN and CMD both are important instructions in a Dockerfile. They seem to be similar but they are different.
RUN in a Dockerfile
RUN is executed at build time. It means that when you build a docker image, RUN gets executed.
Each RUN command creates a new layer inside the docker image.
When you want to install / build dependencies, You will use RUN.
RUN apt-get update
RUN apt-get install curl wget
RUN mkdir -p /usr/src/app
RUN npm install
RUN npm clean
RUN pip install -r requirements.txt
You can also combine multiple run commands to avoid creating multiple layers in the docker image.
RUN apt-get update && apt-get install curl wget
RUN mkdir -p /usr/src/app
RUN npm install && npm clean
CMD in a Dockerfile
CMD lets you define a default command to run when your container starts. CMD is executed at run-time. It means when you launch a container using a docker image.
To launch or run application process in a docker image Use CMD. Starting the web server is the most commonly used command.
CMD npm run dev
CMD node app.js
CMD python main.py