Урок 04. Multistage Dockerfile, Docker Compose
⚡ Кратко: Multistage Dockerfile и Docker Compose
Multistage build — несколько секций FROM в одном Dockerfile. Первые стадии собирают/компилируют, финальная — копирует только нужные артефакты. Результат: образ в 3–10 раз меньше без инструментов сборки.
- FROM … AS build — именованная стадия сборки; COPY --from=build — копировать артефакт из стадии в финальный образ
- Docker Compose — YAML-файл
docker-compose.yml, описывающий несколько сервисов, сети и тома; запуск одной командойdocker compose up - Ключевые поля:
services,build,image,ports,volumes,environment,depends_on,networks - Типы сетей: bridge (изоляция, по умолчанию), host (сеть хоста), none (без сети)
- healthcheck +
depends_on: condition: service_healthy— ждать готовности БД, не просто запуска контейнера
Топ-3 ошибки: 1) Не именовать стадию (AS build) — нельзя сослаться в COPY --from. 2) Использовать устаревший ключ version: в compose-файле — он игнорируется и порождает предупреждения. 3) Полагаться только на depends_on без healthcheck — контейнер «запущен», но БД ещё не готова к подключениям.
📖 О чём этот урок
В предыдущем уроке мы научились писать Dockerfile и запускать одиночные контейнеры. Теперь сделаем два шага вперёд:
- Multistage build — как уменьшить финальный образ, убрав из него всё лишнее: компиляторы, тестовые зависимости, инструменты сборки.
- Docker Compose — как описать и запустить целое приложение из нескольких сервисов (web + db + cache) одной командой, не вводя вручную десятки флагов
docker run.
Оба инструмента решают реальные продакшн-проблемы: раздутые образы с уязвимостями и неудобный ручной запуск связанных контейнеров.
Что изучим
- Принцип Multi Stage build: зачем нужен, как работает
- Синтаксис:
FROM … AS,COPY --from= - Практика: сравнение размера образов с multistage и без
- Docker Compose v2: структура YAML-файла, ключевые поля
- Сети в Docker Compose: bridge, host, none
- Зависимости сервисов:
depends_onиhealthcheck - Команды
docker compose(v2, без дефиса) - Реальные примеры: MediaWiki + MariaDB, WordPress + MySQL
📚 Что повторить перед изучением
- ← Урок 03: Dockerfile, nginx и БД в Docker — написание Dockerfile, слои, COPY, RUN, CMD, volumes
- Понятие слоёв образа и кеширования при сборке
- Команды:
docker build,docker run -p -v -e,docker images - Базовый YAML: отступы, ключ: значение, списки со знаком
-
🎯 Что изучать дальше
- → Урок 05: Облачные вычисления и AWS
- Облачные модели (IaaS / PaaS / SaaS), AWS Global Infrastructure, регионы и зоны доступности
- Как контейнеры деплоятся в облако: AWS ECS, ECR, EKS