Docker Compose: инструкция по работе за 10 минут
Docker Compose — это инструмент для управления многоконтейнерными приложениями. Вместо того чтобы вручную запускать каждый контейнер отдельной командой docker run, вы описываете все сервисы в одном YAML-файле и управляете ими одной командой. Эта инструкция поможет вам освоить основы за 10 минут.
Представьте, что у вас есть веб-приложение, база данных MySQL и кэш Redis. Без Compose вам пришлось бы запускать три контейнера вручную, настраивать сеть между ними, следить за порядком запуска и не забывать про монтирование данных. Compose решает эти проблемы: вы один раз описываете всю конфигурацию в файле compose.yaml (или docker-compose.yml), и дальше запускаете всё одной командой.
Ключевые преимущества:
- Одна команда для всего стека —
docker compose upзапускает все сервисы - Единая конфигурация — файл можно хранить в репозитории, и любой разработчик получит идентичное окружение
- Автоматическое управление сетью — контейнеры видят друг друга по именам сервисов
- Персистентность данных — тома (volumes) сохраняют данные между перезапусками
Важно: используется Compose V2 с командой docker compose (через пробел). Старая версия docker-compose (через дефис) устарела и больше не поддерживается
Установка
Docker Compose V2 входит в состав Docker Desktop для Windows и macOS. На Linux установите плагин Compose вместе с Docker Engine:
sudo apt-get update
sudo apt-get install docker-compose-plugin
Проверка:
docker compose version
Структура файла Compose
Файл compose.yaml состоит из нескольких секций
services: # Обязательная секция — описание контейнеров
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db-data:/var/lib/mysql
volumes: # Именованные тома для сохранения данных
db-data:
networks: # (опционально) Пользовательские сети
app-net:
driver: bridge
Сервисы (services) — это описание каждого контейнера. Имя сервиса (например, web или db) становится DNS-именем, по которому другие контейнеры могут к нему обратиться. Если в одном сервисе указать db, то из другого сервиса можно подключиться к db:3306.
Тома (volumes) — используются для данных, которые должны сохраняться. Без томов данные внутри контейнера исчезнут при его удалении.
Сети (networks) — Compose автоматически создаёт сеть для проекта, но можно определить и свои.