Главная/О курсе и репозитории/Документ

Docker и Containerization для Python-разработчика

Полный практический курс по Docker для Linux, ориентированный на Python-разработчика.

Точка входа — MAIN.md. Там описание всех разделов, порядок изучения, проекты, система оценивания и таблица прогресса. Ниже — оглавление со ссылками на каждый урок.


Оглавление

Разделы читаются по порядку. Полное оглавление отдельным файлом — CONTENTS.md.

00. О курсеЦели обучения · Карта компетенций · Карта курса и зависимости между разделами · Варианты учебного расписания · Система оценивания

Раздел 1. Подготовка среды1.1. Требования к Linux · 1.2. Установка Docker Engine · 1.3. Docker daemon · 1.4. Первый container · 1.5. Docker socket и группа docker · 1.6. Rootless Docker · Задания

Раздел 2. Основы Containerization2.1. Процессы и containers · 2.2. Containers против virtual machines · 2.3. Linux namespaces · 2.4. Cgroups · 2.5. Capabilities · 2.6. Container runtime и OCI · 2.7. Терминология Docker · Задания

Раздел 3. Работа с Images3.1. Архитектура image · 3.2. Слои и copy-on-write · 3.3. Tags и digests · 3.4. Управление images · 3.5. Save, load, export, import · Задания

Раздел 4. Containers и lifecycle4.1. Состояния и переходы · 4.2. Режимы запуска · 4.3. Exec, logs, inspect · 4.4. Сигналы и graceful shutdown · 4.5. PID 1 и init · 4.6. Restart policies и exit codes · Задания

Раздел 5. Dockerfile5.1. Build context и .dockerignore · 5.2. Базовые инструкции · 5.3. COPY, ADD и RUN · 5.4. CMD и ENTRYPOINT · 5.5. Build cache · 5.6. BuildKit · 5.7. Multi-stage builds · 5.8. HEALTHCHECK · 5.9. Воспроизводимые сборки · Задания

Раздел 6. Python внутри Container6.1. Выбор base image · 6.2. Управление зависимостями · 6.3. Python Dockerfile · 6.4. Environment variables · 6.5. Сигналы и PID 1 в Python · 6.6. Logging · 6.7. Non-root user и permissions · 6.8. CLI-приложение · 6.9. Flask · 6.10. FastAPI · 6.11. Worker processes · 6.12. Тестирование в container · 6.13. Resource limits и память Python · Задания

Раздел 7. Storage7.1. Файловая система container · 7.2. Volumes · 7.3. Bind mounts · 7.4. tmpfs и read-only filesystem · 7.5. Права доступа, UID и GID · 7.6. Backup и restore · Задания

Раздел 8. Docker Networking8.1. Основы Docker networking · 8.2. Bridge networks · 8.3. Port publishing · 8.4. Docker DNS · 8.5. Network modes · 8.6. Диагностика · Задания

Раздел 9. Docker Compose9.1. Основы Compose · 9.2. Справочник по services · 9.3. Networks и volumes · 9.4. Healthchecks и зависимости · 9.5. Environment и secrets · 9.6. Несколько файлов и profiles · 9.7. Практический stack · Задания

Раздел 10. Development workflow10.1. Development и production образы · 10.2. Hot reload · 10.3. Отладка в container · 10.4. Database migrations · 10.5. Автоматизация · Задания

Раздел 11. Production-ready containers11.1. Принципы production · 11.2. Runtime hardening · 11.3. Healthchecks и readiness · 11.4. Resource limits и память Python · 11.5. Конфигурация и secrets · 11.6. Supply chain · Задания

Раздел 12. Security12.1. Модель угроз · 12.2. Daemon и socket · 12.3. Пользователи и namespaces · 12.4. Capabilities и privileged · 12.5. Seccomp, AppArmor, SELinux · 12.6. Secrets · 12.7. Supply chain security · Задания

Раздел 13. Observability и диагностика13.1. Логи и logging drivers · 13.2. Inspect, events, stats · 13.3. Нехватка ресурсов · 13.4. Дисковое пространство и очистка · 13.5. Глубокая диагностика · 13.6. Таблица диагностики · Задания

Раздел 14. Registry14.1. Основы registry · 14.2. Аутентификация · 14.3. Локальный registry · 14.4. Стратегия tagging · Задания

Раздел 15. Testing15.1. Стратегия тестирования · 15.2. Тесты внутри container · 15.3. Integration tests через Compose · 15.4. Testcontainers for Python · 15.5. Валидация образа · Задания

Раздел 16. CI/CD16.1. Проектирование pipeline · 16.2. GitHub Actions · 16.3. Build cache в CI · 16.4. Сканирование и SBOM · 16.5. GitLab CI · Задания

Раздел 17. Docker internals17.1. Engine API и Unix socket · 17.2. containerd, shim и runc · 17.3. Namespaces: углублённо · 17.4. Cgroups v2 · 17.5. OverlayFS · Задания

Раздел 18. Docker и Kubernetes18.1. Какие задачи решают Docker и Kubernetes · 18.2. Объекты Kubernetes · 18.3. От Compose к Kubernetes · 18.4. Когда нужна orchestration · Задания

Раздел 19. Ограничения Docker19.1. Где containers усложняют систему · 19.2. Границы изоляции · 19.3. Когда Docker применять не следует · 19.4. Каталог антипаттернов · Задания

Практические проекты1. Python CLI · 2. FastAPI service · 3. Multi-service stack · 4. Production pipeline · обзор

Проверка знанийQuizzes · Checkpoints · Debugging challenges · Теоретический тест · Практический экзамен · Grading rubric

СправочникиDocker CLI · Dockerfile · Compose · Networking · Storage · Production · Security · Python container · Debugging · Cleanup · Антипаттерны · Карта решений · Glossary · Дальнейшее развитие


Что это

Учебный репозиторий в формате Markdown. Он рассчитан на то, чтобы:

  • открываться локально в любом редакторе;
  • храниться в Git;
  • просматриваться в любом Markdown renderer;
  • при желании превращаться в статический documentation website;
  • использоваться как самостоятельный учебный материал без внешних зависимостей.

Курс объясняет не только команды, но и внутренние механизмы: namespaces, cgroups, OverlayFS, NAT, PID 1, build cache. Каждый раздел связан с реальными задачами Python-разработчика.

Быстрый старт

bash
git clone <repository-url> docker-course
cd docker-course

Откройте MAIN.md и следуйте разделу «Как пользоваться курсом».

Проверить, что среда готова:

bash
docker version
docker compose version

Если команды не работают — начните с раздела 01. Подготовка среды.

Требования

КомпонентВерсия
ОСLinux, Ubuntu LTS 22.04 / 24.04 / 26.04 (или аналог)
Docker Engine28.x или 29.x
Docker Composev2 (plugin docker compose)
Python3.13 (примеры), 3.11+ достаточно
Свободное место на дискене менее 20 GB
Оперативная памятьне менее 4 GB

Курс не требует Docker Desktop. Все команды рассчитаны на обычную Linux-систему.

Структура репозитория

text
.
├── MAIN.md                  # главная точка входа: оглавление и навигация
├── README.md                # этот файл
├── COURSE_STATUS.md         # статус готовности материалов курса
├── 00-course-overview/      # цели, компетенции, roadmap, расписания, оценивание
├── 01-environment/ … 19-docker-limitations/   # 19 разделов курса
├── projects/                # 4 практических проекта
├── assessments/             # quizzes, checkpoints, экзамены, rubric
├── references/              # cheat sheets, checklists, glossary, антипаттерны
├── resources/
│   ├── diagrams/            # текстовые диаграммы
│   ├── examples/            # рабочие примеры кода
│   └── source-links.md      # официальные источники
└── config/                  # спецификация, по которой создан курс

Каждый раздел содержит собственный MAIN.md — локальное оглавление с целями, списком материалов и критериями завершения.

Соглашения

  • Все ссылки между файлами — относительные.
  • Имена файлов: латиница, lowercase, дефисы, числовые prefixes.
  • Опасные команды помечены блоком с предупреждением и всегда сопровождаются безопасной альтернативой.
  • Каждый учебный файл заканчивается блоком «Навигация» и списком официальных источников.
  • Факты отделены от рекомендаций: «Docker делает X» и «рекомендуется делать Y» — разные утверждения.

О блоках вывода в уроках

Под командами в уроках приводятся блоки вывода. Это ожидаемый вывод, восстановленный по официальной документации и по поведению описываемых механизмов, а не запись сеанса на конкретной машине: среда, в которой готовился материал, не содержала установленного Docker.

Практические следствия:

  • Числа, зависящие от машины (размеры образов, время сборки, PID, IP-адреса, длительности), у вас будут другими — сравнивайте порядок величины и структуру вывода, а не точные значения.
  • Само наблюдение всегда воспроизводимо: если урок утверждает «остановка занимает 10 секунд и код 137», это следствие описанного механизма, и команда рядом позволяет проверить утверждение самостоятельно.
  • Если ваш результат расходится с приведённым качественно (другой код выхода, другой статус, отсутствующая строка) — расхождение реально, и в уроке есть раздел «Типичные ошибки» с наиболее вероятной причиной.

Что проверено фактически, а что нет — перечислено в COURSE_STATUS.md.

Версионный контекст

Материал проверялся по официальной документации в июле 2026 года. Ключевые версионно-зависимые темы:

  • Docker Engine 29 (релиз 10 ноября 2025) сделал containerd image store значением по умолчанию для новых установок — это меняет вывод docker images и поведение docker save/docker load. Разница объясняется в разделе 03. Работа с Images.
  • BuildKit — сборщик по умолчанию начиная с Docker Engine 23.0; legacy builder объявлен deprecated.
  • Docker Compose v1 (docker-compose, Python) снят с поддержки. Курс использует только docker compose (v2).
  • cgroup v1 объявлен deprecated в Docker Engine 29. Курс ориентируется на cgroup v2.

Полный список проверенных источников: resources/source-links.md.

Лицензия и использование

Учебный материал. Примеры кода в resources/examples/ можно использовать как основу для собственных проектов, но перед применением в production проверьте версии зависимостей и требования вашей инфраструктуры.

Markdown на GitHub ↗