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. Основы Containerization — 2.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. Работа с Images — 3.1. Архитектура image · 3.2. Слои и copy-on-write · 3.3. Tags и digests · 3.4. Управление images · 3.5. Save, load, export, import · Задания
Раздел 4. Containers и lifecycle — 4.1. Состояния и переходы · 4.2. Режимы запуска · 4.3. Exec, logs, inspect · 4.4. Сигналы и graceful shutdown · 4.5. PID 1 и init · 4.6. Restart policies и exit codes · Задания
Раздел 5. Dockerfile — 5.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 внутри Container — 6.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. Storage — 7.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 Networking — 8.1. Основы Docker networking · 8.2. Bridge networks · 8.3. Port publishing · 8.4. Docker DNS · 8.5. Network modes · 8.6. Диагностика · Задания
Раздел 9. Docker Compose — 9.1. Основы Compose · 9.2. Справочник по services · 9.3. Networks и volumes · 9.4. Healthchecks и зависимости · 9.5. Environment и secrets · 9.6. Несколько файлов и profiles · 9.7. Практический stack · Задания
Раздел 10. Development workflow — 10.1. Development и production образы · 10.2. Hot reload · 10.3. Отладка в container · 10.4. Database migrations · 10.5. Автоматизация · Задания
Раздел 11. Production-ready containers — 11.1. Принципы production · 11.2. Runtime hardening · 11.3. Healthchecks и readiness · 11.4. Resource limits и память Python · 11.5. Конфигурация и secrets · 11.6. Supply chain · Задания
Раздел 12. Security — 12.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. Registry — 14.1. Основы registry · 14.2. Аутентификация · 14.3. Локальный registry · 14.4. Стратегия tagging · Задания
Раздел 15. Testing — 15.1. Стратегия тестирования · 15.2. Тесты внутри container · 15.3. Integration tests через Compose · 15.4. Testcontainers for Python · 15.5. Валидация образа · Задания
Раздел 16. CI/CD — 16.1. Проектирование pipeline · 16.2. GitHub Actions · 16.3. Build cache в CI · 16.4. Сканирование и SBOM · 16.5. GitLab CI · Задания
Раздел 17. Docker internals — 17.1. Engine API и Unix socket · 17.2. containerd, shim и runc · 17.3. Namespaces: углублённо · 17.4. Cgroups v2 · 17.5. OverlayFS · Задания
Раздел 18. Docker и Kubernetes — 18.1. Какие задачи решают Docker и Kubernetes · 18.2. Объекты Kubernetes · 18.3. От Compose к Kubernetes · 18.4. Когда нужна orchestration · Задания
Раздел 19. Ограничения Docker — 19.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-разработчика.
Быстрый старт
git clone <repository-url> docker-course
cd docker-course
Откройте MAIN.md и следуйте разделу «Как пользоваться курсом».
Проверить, что среда готова:
docker version
docker compose version
Если команды не работают — начните с раздела 01. Подготовка среды.
Требования
| Компонент | Версия |
|---|---|
| ОС | Linux, Ubuntu LTS 22.04 / 24.04 / 26.04 (или аналог) |
| Docker Engine | 28.x или 29.x |
| Docker Compose | v2 (plugin docker compose) |
| Python | 3.13 (примеры), 3.11+ достаточно |
| Свободное место на диске | не менее 20 GB |
| Оперативная память | не менее 4 GB |
Курс не требует Docker Desktop. Все команды рассчитаны на обычную Linux-систему.
Структура репозитория
.
├── 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 проверьте версии зависимостей и требования вашей инфраструктуры.