Ответ
Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. Вместо запуска каждого контейнера отдельной командой docker run с множеством флагов, вы описываете всю сервисную архитектуру (контейнеры, сети, тома) в декларативном YAML-файле (docker-compose.yml) и управляете ею простыми командами.
Основная цель: Упрощение оркестрации нескольких взаимосвязанных контейнеров для разработки, тестирования и staging-окружений.
Типичный пример docker-compose.yml для веб-приложения:
version: '3.8'
services:
# Сервис 1: Веб-приложение на ASP.NET Core
webapi:
build: . # Собрать образ из Dockerfile в текущей директории
container_name: my-app-api
ports:
- "5000:80" # Проброс порта host:container
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ConnectionStrings__Database=Host=db;Database=AppDb;Username=postgres;Password=secret
depends_on:
- db # Запускать только после запуска сервиса 'db'
volumes:
- ./logs:/app/logs # Монтирование директории для логов
# Сервис 2: База данных PostgreSQL
db:
image: postgres:15-alpine # Использовать готовый образ из реестра
container_name: my-app-database
environment:
POSTGRES_DB: AppDb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
volumes:
- postgres_data:/var/lib/postgresql/data # Постоянное хранилище для данных БД
# Сервис 3: Клиентское приложение (например, React)
frontend:
image: nginx:alpine
container_name: my-app-frontend
ports:
- "3000:80"
volumes:
- ./frontend/build:/usr/share/nginx/html:ro
# Определение томов для хранения данных
volumes:
postgres_data:
Ключевые команды Docker Compose:
docker-compose up— собрать образы (если нужно), создать и запустить все сервисы.docker-compose up -d— запустить в фоновом режиме (detached).docker-compose down— остановить и удалить контейнеры, сети.docker-compose ps— показать статус запущенных сервисов.docker-compose logs -f [service_name]— просмотр логов в реальном времени.docker-compose exec [service_name] [command]— выполнить команду внутри запущенного контейнера.
Преимущества:
- Однокомандное развертывание: Вся инфраструктура приложения описывается в одном файле и запускается одной командой.
- Изоляция окружения: Гарантирует, что у всех разработчиков идентичное окружение (версии СУБД, кэшей и т.д.).
- Упрощение конфигурации: Легко описывать сети между контейнерами, общие тома, переменные окружения.
Ограничения: Docker Compose предназначен в первую очередь для работы на одном хосте. Для управления контейнерами в кластерном продакшн-окружении с автоматическим масштабированием и отказоустойчивостью используются оркестраторы, такие как Kubernetes или Docker Swarm.