How to Build a Docker Image: A Step-by-Step Guide
Docker images are the foundation of containerized applications. Understanding how to build one — and what shapes the process — is essential for anyone working with modern software development, DevOps pipelines, or self-hosted applications.
What Is a Docker Image?
A Docker image is a read-only template that contains everything needed to run an application: the operating system layer, runtime environment, dependencies, configuration files, and application code. When you run an image, Docker creates a container — a live, isolated instance based on that template.
Images are built in layers. Each instruction in a build file adds a new layer on top of the previous one. Docker caches these layers, which makes rebuilds faster when only part of your setup changes.
The Dockerfile: Where Every Build Starts
Every Docker image is built from a Dockerfile — a plain text file with a specific set of instructions. There's no GUI involved; it's a declarative script that Docker reads top to bottom.
Common Dockerfile instructions:
| Instruction | What It Does |
|---|---|
| FROM | Sets the base image (e.g., Ubuntu, Node, Python) |
| RUN | Executes a shell command during the build |
| COPY / ADD | Copies files from your local machine into the image |
| WORKDIR | Sets the working directory inside the image |
| ENV | Defines environment variables |
| EXPOSE | Documents which port the container listens on |
| CMD / ENTRYPOINT | Defines the default command to run at startup |
A minimal example for a Node.js application: