0
0
Dockerdevops~5 mins

Combining RUN commands in Docker - Commands & Configuration

Choose your learning style9 modes available
Introduction
When building Docker images, each RUN command creates a new layer. Combining multiple commands into one RUN reduces image size and speeds up builds by minimizing layers.
When you want to install multiple packages in one step to keep the image small
When you need to run several setup commands that depend on each other
When you want to clean temporary files after installation in the same step
When you want to reduce the number of layers to improve build speed
When you want to keep your Dockerfile clean and efficient
Config File - Dockerfile
Dockerfile
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

CMD ["bash"]

FROM sets the base image.

RUN combines update, install, and cleanup commands using && and line continuation \ for readability.

This reduces image layers and removes temporary files to keep the image small.

CMD sets the default command to run a bash shell.

Commands
Builds the Docker image named 'combined-run-example' using the Dockerfile in the current directory. This runs the combined RUN commands in one layer.
Terminal
docker build -t combined-run-example .
Expected OutputExpected
[+] Building 5.3s (7/7) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 123B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/library/ubuntu:22.04 => [1/3] FROM docker.io/library/ubuntu:22.04@sha256:... => CACHED [2/3] RUN apt-get update && apt-get install -y curl git && rm -rf /var/lib/apt/lists/* => [3/3] CMD ["bash"] => exporting to image => => exporting layers => => writing image sha256:... => => naming to docker.io/library/combined-run-example
-t - Assigns a name and optionally a tag to the image
Lists the Docker images filtered by the name 'combined-run-example' to verify the image was built.
Terminal
docker images combined-run-example
Expected OutputExpected
REPOSITORY TAG IMAGE ID CREATED SIZE combined-run-example latest abcdef123456 10 seconds ago 88MB
Runs a container from the image and checks that curl and git are installed by printing their versions.
Terminal
docker run --rm combined-run-example bash -c "curl --version && git --version"
Expected OutputExpected
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 Release-Date: 2022-03-30 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS HTTPS-proxy IPv6 Largefile NTLM NTLM_WB SSL TLS-SRP UnixSockets git version 2.34.1
--rm - Automatically removes the container after it exits
Key Concept

If you remember nothing else from this pattern, remember: combining multiple commands in one RUN reduces image size and speeds up builds by creating fewer layers.

Common Mistakes
Writing multiple RUN commands separately instead of combining them
Each RUN creates a new layer, increasing image size and build time.
Combine commands with && in a single RUN to reduce layers and clean up temporary files in the same step.
Not cleaning up temporary files after installing packages
Temporary files remain in the image, making it larger than necessary.
Use commands like rm -rf /var/lib/apt/lists/* in the same RUN to remove temporary files.
Summary
Use one RUN command with && to combine multiple shell commands.
Cleaning up temporary files in the same RUN keeps the image small.
Fewer RUN commands mean fewer image layers and faster builds.