Docker-практикум
Практический курс о контейнерах для разработчиков, тестировщиков и начинающих DevOps-инженеров. Участники собирают образы, запускают compose-стенды и разбирают типичные ошибки локального деплоя.
Для кого курс
- Разработчики, которым нужно упаковывать приложения.
- QA-инженеры, поднимающие локальные стенды.
- Студенты, изучающие backend и инфраструктуру.
- Администраторы учебных лабораторий.
Что понадобится
- Docker Desktop или Docker Engine.
- Базовое понимание терминала.
- Любой текстовый редактор.
- Небольшое приложение для упаковки в контейнер.
Неделя 1. Образы и контейнеры
Темы
- Что такое образ и контейнер.
- Слои образа и кэш сборки.
FROM,WORKDIR,COPY,RUN,CMD.- Отличие build-time и run-time настроек.
- Переменные окружения.
- Пользователь внутри контейнера.
- Минимальные образы и размер результата.
Практика
- Собрать первый образ.
- Запустить контейнер с пробросом порта.
- Посмотреть логи приложения.
- Зайти внутрь контейнера и проверить файлы.
Домашнее задание
Упаковать маленькое Flask-приложение в Docker-образ, запустить его локально и описать, какие файлы попали внутрь образа.
Неделя 2. Docker Compose
Темы
- Сервисы, сети и тома.
- Проброс портов и частые конфликты.
docker compose up,down,ps,logs,exec.- Переменные окружения и
.env. - Зависимости между сервисами.
- Пересборка образов.
- Отладка локального стенда.
Практика
- Поднять приложение и базу данных.
- Проверить сеть между контейнерами.
- Изменить порт без правки кода.
- Найти ошибку в compose-файле.
Домашнее задание
Собрать compose-стенд из двух сервисов: web-приложение и Redis или PostgreSQL. Добавить README с командами запуска и проверки.
Неделя 3. Безопасность и эксплуатация
Темы
- Почему нельзя хранить секреты в образе.
- Debug-режимы внутри контейнеров.
- Права пользователя и rootless-подход.
- Read-only filesystem и временные директории.
- Healthcheck и наблюдаемость.
- Логи контейнера и ротация.
- Разница между локальным стендом и production.
Практика
- Найти секрет в образе.
- Запустить приложение от отдельного пользователя.
- Добавить healthcheck.
- Составить список настроек, опасных для production.
Домашнее задание
Провести ревью учебного Dockerfile и compose-файла: найти минимум пять проблем и предложить исправления.
Финальный проект
Студенты получают приложение без контейнеризации и должны:
- Написать Dockerfile.
- Подготовить docker-compose.yml.
- Настроить порт, переменные окружения и пользователя.
- Добавить инструкцию запуска.
- Объяснить, какие настройки годятся только для разработки.
Контрольные вопросы
- Почему порядок инструкций в Dockerfile влияет на скорость сборки?
- Чем отличается порт внутри контейнера от порта на хосте?
- Когда нужен volume?
- Почему
latestможет быть плохим выбором для production? - Как понять, что контейнер действительно запустил приложение?
Лабораторные работы
Лабораторная 1. Образ без лишнего мусора
Студент собирает образ для приложения и затем уменьшает его размер, меняя порядок инструкций и исключая ненужные файлы из build context.
Проверяется:
- понимание слоев;
- использование
.dockerignore; - стабильность сборки;
- отсутствие секретов в образе;
- объяснение изменений.
Лабораторная 2. Compose-стенд
Нужно поднять web-сервис и вспомогательный сервис, настроить сеть, переменные окружения и порты, а затем проверить взаимодействие контейнеров.
Проверяется:
- корректный
docker-compose.yml; - отсутствие конфликтов портов;
- работа DNS по имени сервиса;
- просмотр логов;
- инструкция запуска.
Лабораторная 3. Небезопасный контейнер
Студент получает Dockerfile с несколькими ошибками безопасности и должен предложить исправления без поломки приложения.
Проверяется:
- запуск не от root;
- отсутствие debug-настроек в production;
- работа с секретами;
- минимизация прав;
- проверка после исправления.
Критерии оценки
- Образ собирается повторяемо.
- Команды запуска описаны в README.
- Порты и переменные окружения понятны.
- Контейнер можно диагностировать через логи.
- Опасные настройки явно отмечены как dev-only.
Типичные ошибки
- Копировать в образ весь проект вместе с временными файлами.
- Хардкодить секреты в Dockerfile.
- Использовать один и тот же порт без проверки конфликта.
- Не пересобирать образ после изменения зависимостей.
- Путать
CMDиRUN.
Дополнительные темы
- Multi-stage builds.
- Healthcheck и readiness.
- Volumes для разработки.
- Просмотр слоев образа.
- Разделение compose-файлов для dev и staging.
Результат
Студент сможет собрать контейнер, запустить локальный стенд, диагностировать ошибки compose и объяснить, почему некоторые настройки нельзя переносить в продакшен.