Skip to content
Back to skills

Docker Learning Journey

ASecurity

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.

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
devopspythongoshellbashsqlfastapidockerkubernetesawsgcp

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill docker-learning-journey --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Docker Learning Journey?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Docker Learning Journey
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-docker-learning-journey/badge)](https://www.skillsdirectory.com/skills/majiayu000-docker-learning-journey)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: docker-learning-journey
description: |
  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.
---

# 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 |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.