Agent skill

docker-learning-journey

Interactive Docker learning guide from basics to production, tailored for Python/FastAPI developers. This skill should be used when users want to learn Docker concepts, understand container fundamentals, practice Docker commands, or progress from beginner to production-ready Docker knowledge.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/docker-learning-journey

SKILL.md

Docker Learning Journey

An interactive, progressive Docker learning guide designed for Python and FastAPI developers. Learn by doing with practical exercises and real-world examples.

What This Skill Does

  • Teaches Docker concepts progressively (basics → intermediate → production)
  • Connects Docker concepts to Python/FastAPI knowledge you already have
  • Provides hands-on exercises at each level
  • Offers quick command references with explanations
  • Guides containerization of FastAPI applications

What This Skill Does NOT Do

  • Cover Kubernetes (that's a separate journey)
  • Handle cloud-specific deployments (AWS ECS, GCP Cloud Run)
  • Replace official Docker documentation for edge cases

Before Starting

Assess where you are:

Level You Can... Start At
Beginner Haven't used Docker Module 1
Basic Run containers, pull images Module 2
Intermediate Write Dockerfiles, use compose Module 3
Advanced Multi-stage builds, optimization Module 4

Learning Modules

Module 1: Docker Fundamentals

Goal: Understand what Docker is and run your first container

Key Concepts:

Image      = Blueprint/Recipe (like a Python class)
Container  = Running instance (like a Python object)
Registry   = Image storage (like PyPI for packages)

Your First Commands:

bash
# 1. Check Docker is installed
docker --version

# 2. Pull an image (download the blueprint)
docker pull python:3.12-slim

# 3. Run a container (create an instance)
docker run -it python:3.12-slim python
# You're now inside a Python container! Type exit() to leave

# 4. See what's running
docker ps        # Running containers
docker ps -a     # All containers (including stopped)

# 5. See downloaded images
docker images

Python Analogy:

python
# This is like Docker:
class PythonEnvironment:        # Image
    def __init__(self):
        self.python = "3.12"
        self.packages = []

env1 = PythonEnvironment()      # Container 1
env2 = PythonEnvironment()      # Container 2 (isolated!)

Exercise: See assets/exercises/01-first-container.md


Module 2: Building Images with Dockerfile

Goal: Create your own images with Dockerfile

Key Concept: Dockerfile = Recipe with steps

dockerfile
# Every Dockerfile starts with a base image
FROM python:3.12-slim

# Set working directory (like cd)
WORKDIR /app

# Copy files from your computer into the image
COPY requirements.txt .

# Run commands (install dependencies)
RUN pip install -r requirements.txt

# Copy your application code
COPY . .

# Default command when container starts
CMD ["python", "main.py"]

Layer Concept (Important!):

┌─────────────────────────┐
│ CMD ["python", "main.py"] │  ← Layer 5 (your command)
├─────────────────────────┤
│ COPY . .                  │  ← Layer 4 (your code)
├─────────────────────────┤
│ RUN pip install...        │  ← Layer 3 (dependencies)
├─────────────────────────┤
│ COPY requirements.txt     │  ← Layer 2 (requirements file)
├─────────────────────────┤
│ FROM python:3.12-slim     │  ← Layer 1 (base image)
└─────────────────────────┘

Each layer is CACHED! Change order matters for speed.

Build Commands:

bash
# Build an image from Dockerfile
docker build -t myapp:v1 .

# -t = tag (name:version)
# .  = build context (current directory)

# Run your new image
docker run myapp:v1

Exercise: See assets/exercises/02-first-dockerfile.md


Module 3: Docker Compose (Multi-Container Apps)

Goal: Run multiple containers together (FastAPI + Database)

Key Concept: Compose = Orchestra conductor for containers

yaml
# docker-compose.yml
services:
  api:                          # Your FastAPI app
    build: .
    ports:
      - "8000:8000"             # host:container
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/app
    depends_on:
      - db

  db:                           # PostgreSQL database
    image: postgres:15
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:                # Persist data between restarts

Compose Commands:

bash
# Start all services
docker compose up

# Start in background (detached)
docker compose up -d

# Stop all services
docker compose down

# View logs
docker compose logs -f api

# Rebuild after code changes
docker compose up --build

Exercise: See assets/exercises/03-compose-fastapi.md


Module 4: Production Patterns

Goal: Build optimized, secure, production-ready images

Multi-Stage Builds (The Key Technique):

dockerfile
# Stage 1: Builder (temporary, has build tools)
FROM python:3.12-slim AS builder
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --locked --no-dev

# Stage 2: Runtime (final, minimal)
FROM python:3.12-slim AS runtime
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY ./app ./app
ENV PATH="/app/.venv/bin:$PATH"
CMD ["fastapi", "run", "app/main.py", "--port", "80"]

Why Multi-Stage?

Builder Stage: 400MB (has uv, build tools)
         ↓
    Copies only .venv
         ↓
Runtime Stage: 150MB (minimal, secure)

Production Checklist:

  • Multi-stage build (small image)
  • Non-root user (security)
  • Health check (monitoring)
  • .dockerignore (exclude unnecessary files)
  • No secrets in image (use env vars)

Exercise: See assets/exercises/04-production-build.md


Quick Reference

Essential Commands

Task Command
Pull image docker pull image:tag
Run container docker run -d -p 8000:80 image
List running docker ps
List all docker ps -a
Stop container docker stop <id>
Remove container docker rm <id>
List images docker images
Build image docker build -t name:tag .
Remove image docker rmi image:tag
View logs docker logs <id>
Shell into docker exec -it <id> /bin/bash

Compose Commands

Task Command
Start services docker compose up
Start detached docker compose up -d
Stop services docker compose down
Rebuild docker compose up --build
View logs docker compose logs -f
Run command docker compose exec api bash

Port Mapping Explained

-p 8000:80
   │    │
   │    └── Container port (inside)
   └─────── Host port (your computer)

Access at: http://localhost:8000

Common Errors & Solutions

Error Cause Solution
"port already in use" Another process on that port Change host port or stop other process
"image not found" Typo or not pulled docker pull image:tag
"permission denied" Docker daemon not running Start Docker Desktop
"no space left" Docker cache full docker system prune
"connection refused" Container not ready Add health check, use depends_on

Python Developer's Mental Model

Python Docker
pip install docker pull
requirements.txt Dockerfile's RUN pip install
venv Container isolation
python main.py docker run
pip freeze docker images
Multiple projects Multiple containers
.gitignore .dockerignore

Learning Path Checklist

Week 1: Foundations

  • Install Docker Desktop
  • Run hello-world container
  • Pull and run Python image
  • Understand images vs containers
  • Complete Exercise 01

Week 2: Building

  • Write first Dockerfile
  • Build custom image
  • Understand layers and caching
  • Complete Exercise 02

Week 3: Composing

  • Write docker-compose.yml
  • Run FastAPI + PostgreSQL
  • Understand volumes and networks
  • Complete Exercise 03

Week 4: Production

  • Multi-stage Dockerfile
  • Optimize image size
  • Add security practices
  • Complete Exercise 04

Reference Files

File When to Read
references/01-core-concepts.md Deep dive into Docker architecture
references/02-dockerfile-reference.md All Dockerfile instructions
references/03-compose-reference.md Docker Compose file format
references/04-fastapi-docker.md FastAPI-specific patterns
references/05-troubleshooting.md Common issues and fixes

Exercises

Exercise Level Goal
assets/exercises/01-first-container.md Beginner Run Python in container
assets/exercises/02-first-dockerfile.md Beginner Build custom image
assets/exercises/03-compose-fastapi.md Intermediate Full stack app
assets/exercises/04-production-build.md Advanced Optimized deployment

Cheatsheets

File Contents
assets/cheatsheets/commands.md All Docker commands
assets/cheatsheets/dockerfile.md Dockerfile syntax
assets/cheatsheets/compose.md Compose file syntax

Didn't find tool you were looking for?

Be as detailed as possible for better results