Docker Compose — инструмент для запуска нескольких связанных контейнеров как единого приложения. Конфигурация описывается в файле docker-compose.yml.
Зачем нужен Compose
Реальное приложение — несколько сервисов: веб-сервер, база данных, кэш, очередь задач. Запускать каждый вручную через docker run с десятками флагов — неудобно. Compose описывает всё в одном файле и запускает одной командой.
Минимальный docker-compose.yml
version: "3.8"
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
environment:
DATABASE_URL: postgresql://user:pass@db:5432/mydb
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Основные команды
docker compose up # запустить все сервисы
docker compose up -d # в фоне
docker compose up --build # с пересборкой образов
docker compose down # остановить и удалить контейнеры
docker compose down -v # также удалить volumes
docker compose ps # статус сервисов
docker compose logs # логи всех сервисов
docker compose logs web # логи конкретного сервиса
docker compose logs -f web # следить за логами
docker compose exec web bash # зайти внутрь сервиса
docker compose restart web # перезапустить сервис
docker compose build # пересобрать образы
Ключевые поля сервиса
services:
web:
image: nginx:latest # использовать готовый образ
build: . # или собрать из Dockerfile
ports:
- "8080:80" # хост:контейнер
volumes:
- ./html:/usr/share/nginx/html # монтировать папку
environment:
- DEBUG=true # переменные окружения
env_file:
- .env # из файла
depends_on:
- db # порядок запуска
restart: unless-stopped # политика перезапуска
networks:
- backend # своя сеть
Сети в Compose
Сервисы в одном docker-compose.yml автоматически видят друг друга по имени сервиса. Из сервиса web можно обратиться к db просто по имени: db:5432.
Переменные окружения
# Из файла .env (автоматически загружается):
POSTGRES_PASSWORD=secret
# В docker-compose.yml:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
Не коммить .env в git — добавь в .gitignore.
restart политики
no— не перезапускать (по умолчанию)always— всегда перезапускатьunless-stopped— перезапускать кроме случая ручной остановкиon-failure— только при ошибке (ненулевой exit code)
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!