Dk

Containerization

·View all resources →

Docker Learning Roadmap

Docker lets you package an application and all its dependencies into a container — a lightweight, portable, self-contained unit. It's the universal standard for shipping software: if your code runs in a Docker container, it runs the same everywhere. Almost every backend and DevOps job requires Docker.

Total time

6–10 weeks

Stages

5 stages

Job-ready at

Stage 3

Career paths

3 paths

1
2
3
4
5

Before you start — Prerequisites

✓
Linux command-line basics

Docker commands run in a shell and most containers use Linux — you need to be comfortable with ls, cd, cat, and file permissions.

✓

Any backend language (Python, Node, Go)

You need an application to containerize. Docker is a packaging tool, not a programming language.

✓

Basic networking concepts

Understanding IP addresses, ports, and HTTP helps when you expose container ports and connect services.

1

Stage 1: Container Basics

Run, inspect, and manage containers

1–2 weeks

Topics to cover

What a container is vs a virtual machinedocker run, docker ps, docker stopDocker Hub and pulling imagesPort mapping: -p host:containerVolume mounts: -v for persistent dataEnvironment variables: -e and --env-filedocker exec: running commands inside containersdocker logs — reading container outputdocker rm and image cleanupContainer naming and restart policies

Bold = especially important

Milestone

You can pull any Docker image, run a container with correct port and volume mappings, inspect logs, and exec into a running container.

Project to build

Run a dev database in Docker

Start a PostgreSQL container, connect to it with psql, persist data with a volume, and restart it without losing data.

2

Stage 2: Writing Dockerfiles

Package your own applications

2–3 weeks

Topics to cover

FROM, RUN, COPY, ADD, CMD, ENTRYPOINTWORKDIR and USER instructionsBuild context and .dockerignoreLayer caching — ordering instructions for speedMulti-stage builds: slim production imagesARG vs ENV in DockerfilesHEALTHCHECK instructionImage tagging and versioning strategyBase image selection (alpine vs slim vs full)docker build and docker push to registry

Bold = especially important

Milestone

You write production-ready Dockerfiles with multi-stage builds, proper layer caching, and minimal final image sizes.

Project to build

Containerize a web app

Write a Dockerfile for a Python Flask or Node.js app — multi-stage build, non-root user, .dockerignore, push to Docker Hub.

3

Stage 3: Docker Compose

✓ Min. Job Ready

Orchestrate multi-container applications locally

1–2 weeks

Topics to cover

docker-compose.yml structureServices, networks, and volumes in Composedocker compose up -d and downdepends_on and service health checksEnvironment variable overrides with .envCompose profiles for optional servicesdocker compose logs -f and execNamed volumes vs bind mounts in ComposeOverride files: docker-compose.override.ymlScaling services with --scale

Bold = especially important

Milestone

You define a complete local dev environment in docker-compose.yml — app, database, cache — and onboard a new developer with a single command.

Project to build

Full-stack dev environment

docker-compose.yml with your web app, PostgreSQL, Redis — correct networking, named volumes, health checks, .env file.

4

Stage 4: Networking, Security & Registries

Production-ready container operations

2–3 weeks

Topics to cover

Bridge, host, and overlay networksDNS resolution between containersContainer security: rootless Docker, seccompImage scanning: docker scout or trivyPrivate registries: ECR, GCR, GHCRSecrets management (not env vars for secrets)Read-only containers and dropped capabilitiesResource limits: --memory and --cpusContent trust and image signingDocker socket exposure risks

Bold = especially important

Milestone

You configure container networking, scan images for CVEs, push to private registries, and apply basic security hardening.

Project to build

Hardened app container

Non-root user, read-only filesystem, scanned with trivy, pushed to GHCR — production security checklist applied.

5

Stage 5: CI/CD & Production Deployment

Automate build, test, and deploy

2–3 weeks

Topics to cover

GitHub Actions: build and push on push/tagDocker layer caching in CIMulti-platform builds: linux/amd64 + arm64Deploy to ECS, Cloud Run, or Fly.ioRolling updates and zero-downtime deploysContainer logging to CloudWatch or DatadogDockerfile linting with hadolintIntro to Kubernetes for container orchestrationDocker Swarm (legacy — know it exists)GitOps with ArgoCD or Flux

Bold = especially important

Milestone

Every commit automatically builds, tests, and deploys a Docker image. You run production containers with zero-downtime deploys.

Project to build

Automated CI/CD pipeline

GitHub Actions: build image, run tests inside container, push to GHCR, deploy to Fly.io on tag — fully automated.

Frequently asked questions

What is the difference between Docker and a virtual machine?

A virtual machine emulates an entire computer including the OS kernel — it's heavy (GB of RAM, minutes to start). Docker containers share the host OS kernel and only package the application layer — they start in milliseconds and use megabytes. Containers are faster, lighter, and more portable.

Do I need Docker Desktop or can I use Docker on Linux?

On Linux, you can install the Docker Engine directly (free, open-source). On macOS/Windows, Docker Desktop provides a Linux VM that runs the Docker daemon — it's the standard way to use Docker on those platforms. Docker Desktop is free for individuals and small teams.

What is Docker Compose and do I need it?

Docker Compose lets you define multi-container apps (e.g., your app + a database + a Redis cache) in a single docker-compose.yml file and start them all with one command. Yes — almost every real project uses Compose for local development.

Docker vs Podman vs containerd — which should I learn?

Learn Docker first. Podman is a daemonless alternative with a compatible CLI, but Docker remains the industry standard. containerd is the container runtime that runs under both Docker and Kubernetes — you interact with it indirectly.

Do I need to learn Kubernetes after Docker?

For local development and small deployments, Docker alone is sufficient. For production at scale, Kubernetes orchestrates multiple containers across multiple servers. Most DevOps jobs want both — Docker first, then Kubernetes.

Ready to start learning?

Browse our curated Docker resources — every course, book, and video ranked by quality.

View Docker Resources →