Docker Compose: запуск нескольких контейнеров вместе
Коротко: Docker Compose описывает несколько контейнеров, сетей и томов в одном файле и запускает их одной командой; идеально для веб-приложения с базой данных в разработке и на небольших серверах.
Подробнее: Приложение часто состоит из нескольких частей: веб-приложение, база данных, кэш, обратный прокси. С отдельными командами docker run это становится запутанным. Docker Compose объединяет всё в одном compose.yaml.
Подробности
Пример
services:
web:
build: .
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgres://app:secret@db:5432/app
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app
volumes:
- dbdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5s
volumes:
dbdata:Сервисы обращаются друг к другу по имени (db). Compose создаёт общую сеть.
Важные команды
docker compose up -d # запустить (в фоне)
docker compose logs -f web # следить за журналами
docker compose ps # состояние
docker compose exec db psql -U app # команда в контейнере
docker compose down # остановить и удалить
docker compose down -v # дополнительно удалить тома (данные пропадут!)
docker compose up --build # пересобратьСтарый синтаксис: docker-compose (через дефис).
Конфигурация и безопасность
- Секреты не записывайте в репозиторий: файл
.env(в.gitignore),env_file:или Docker secrets. - Публикуйте порты только где необходимо; не открывайте внутренние сервисы (база данных) наружу (
127.0.0.1:или вообще без порта). - Тома для постоянных данных; планируйте резервные копии.
- Фиксируйте версии (
postgres:16вместоlatest). - Проверки работоспособности и
restart: unless-stoppedдля стабильности. - С помощью профилей и файлов переопределения (
compose.override.yaml) разделяют разработку и production.
Ограничения
Compose работает на одной машине. Для многих серверов, автоматического масштабирования и отказоустойчивости используйте Kubernetes или Docker Swarm. Для домашних серверов и небольших проектов Compose обычно идеален. Сначала изучите основы Docker, затем Compose.
См. также: Docker, Тома и сети Docker, Основы Kubernetes, Docker: порт уже занят, Файлы env