Академия Онлайн

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 и объяснить, почему некоторые настройки нельзя переносить в продакшен.