Введение
Docker Compose — незаменимый инструмент для разработчиков, стремящихся оптимизировать управление контейнерами и развертывание приложений. Этот исчерпывающий учебник исследует основы Docker Compose, предоставляя практические знания по конфигурированию, развертыванию и управлению сложными многоконтейнерными средами эффективно и систематично.
Основы Docker Compose
Введение в Docker Compose
Docker Compose — мощный инструмент для определения и запуска многоконтейнерных приложений Docker. Он позволяет разработчикам использовать файл YAML для конфигурации сервисов, сетей и томов приложения, упрощая процесс оркестрации и управления контейнерами.
Основные понятия и архитектура
graph TD
A[Docker Compose] --> B[Конфигурация сервиса]
A --> C[Управление многоконтейнерными приложениями]
A --> D[Декларативная инфраструктура]
| Ключевое понятие | Описание |
|---|---|
| docker-compose.yml | Файл конфигурации, определяющий сервисы, сети и тома |
| Services | Отдельные контейнеры, составляющие приложение |
| Volumes | Постоянное хранилище данных для контейнеров |
| Networks | Настраиваемые сети для взаимодействия между контейнерами |
Практический пример: Настройка веб-приложения
Вот исчерпывающий пример, демонстрирующий конфигурацию Docker Compose для типичного веб-приложения:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Разбор кода
version: '3.8'указывает формат файла Docker Compose- Раздел
servicesопределяет два контейнера: веб-сервер и базу данных - Сервис
nginxотображает порт хоста 80 на порт контейнера 80 - Сервис
postgresнастраивает базу данных с постоянным хранилищем данных
Установка и основные команды
Для установки Docker Compose на Ubuntu 22.04:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
Основные команды Docker Compose:
docker compose up: Запустить все сервисыdocker compose down: Остановить и удалить контейнерыdocker compose ps: Список запущенных сервисовdocker compose logs: Просмотреть логи сервисов
Конфигурация и Развертывание
Структура файла Docker Compose
Конфигурация Docker Compose основана на файле YAML, который определяет всю инфраструктуру приложения. Стандартный файл называется docker-compose.yml и содержит полные определения сервисов.
graph TD
A[docker-compose.yml] --> B[Services]
A --> C[Networks]
A --> D[Volumes]
A --> E[Переменные окружения]
Подробный пример конфигурации сервиса
version: "3.8"
services:
backend:
image: python:3.9
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:password@database:5432/appdb
depends_on:
- database
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
postgres_data:
Параметры конфигурации
| Параметр | Описание | Пример |
|---|---|---|
image |
Базовый образ контейнера | nginx:latest |
build |
Конфигурация сборки пользовательского образа | context: ./app |
ports |
Отображение портов | "8080:80" |
volumes |
Постоянное хранилище данных | - ./data:/app/data |
environment |
Переменные окружения контейнера | DATABASE_HOST=localhost |
Стратегии развертывания
graph LR
A[Локальное Развертывание] --> B[Этап Staging]
B --> C[Развертывание в Производственной Среде]
C --> D[Масштабирование Сервисов]
Команды развертывания
Типичный рабочий процесс развертывания на Ubuntu 22.04:
## Проверка файла compose
docker compose config
## Сборка сервисов
docker compose build
## Запуск сервисов
docker compose up -d
## Проверка запущенных сервисов
docker compose ps
## Просмотр логов
docker compose logs backend
## Остановка сервисов
docker compose down
Расширенные методы конфигурации
services:
webserver:
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Advanced Compose Strategies
Multi-Environment Configuration
Docker Compose supports sophisticated environment management through multiple configuration files and override mechanisms.
graph LR
A[Base Configuration] --> B[Development Override]
A --> C[Production Override]
A --> D[Staging Override]
Environment-Specific Configuration
version: "3.8"
services:
application:
image: myapp:latest
environment:
- APP_ENV=${DEPLOY_ENV:-development}
- DATABASE_URL=${DATABASE_CONNECTION}
Scaling Services Dynamically
## Scale web service to 3 instances
docker compose up -d --scale web=3
Advanced Networking Configurations
| Network Mode | Description | Use Case |
|---|---|---|
| bridge | Default network | Isolated container communication |
| host | Direct host network | High-performance scenarios |
| custom | User-defined networks | Complex microservice architectures |
Production-Ready Compose Example
version: '3.8'
services:
webserver:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
backend:
image: myapp:${VERSION}
secrets:
- db_password
configs:
- source: app_config
target: /app/config.json
secrets:
db_password:
external: true
configs:
app_config:
file: ./config.json
Container Versioning Strategies
## Tag and push versioned images
docker build -t myapp:v1.0 .
docker compose push
Deployment Workflow
graph TD
A[Build Images] --> B[Run Tests]
B --> C[Push to Registry]
C --> D[Deploy Containers]
D --> E[Monitor Performance]
Security and Compliance Commands
## Scan compose services for vulnerabilities
docker compose config --resolve-env-vars
docker scan docker-compose.yml
Расширенные стратегии Compose
Конфигурация для нескольких сред
Docker Compose поддерживает сложную систему управления средами с помощью нескольких файлов конфигурации и механизмов переопределения.
graph LR
A[Базовая конфигурация] --> B[Переопределение для разработки]
A --> C[Переопределение для производства]
A --> D[Переопределение для этапа Staging]
Конфигурация, специфичная для среды
version: "3.8"
services:
application:
image: myapp:latest
environment:
- APP_ENV=${DEPLOY_ENV:-development}
- DATABASE_URL=${DATABASE_CONNECTION}
Динамическое масштабирование сервисов
## Масштабирование веб-сервиса до 3 экземпляров
docker compose up -d --scale web=3
Расширенные конфигурации сетей
| Режим сети | Описание | Сценарий использования |
|---|---|---|
| bridge | Стандартная сеть | Взаимодействие изолированных контейнеров |
| host | Прямая сеть хоста | Высокопроизводительные сценарии |
| custom | Пользовательская сеть | Сложные архитектуры микросервисов |
Пример конфигурации Compose для производства
version: '3.8'
services:
webserver:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
backend:
image: myapp:${VERSION}
secrets:
- db_password
configs:
- source: app_config
target: /app/config.json
secrets:
db_password:
external: true
configs:
app_config:
file: ./config.json
Стратегии управления версиями контейнеров
## Разметка и отправка версионированных образов
docker build -t myapp:v1.0 .
docker compose push
Рабочий процесс развертывания
graph TD
A[Сборка образов] --> B[Запуск тестов]
B --> C[Отправка в реестр]
C --> D[Развертывание контейнеров]
D --> E[Мониторинг производительности]
Команды для обеспечения безопасности и соответствия требованиям
## Сканирование сервисов Compose на предмет уязвимостей
docker compose config --resolve-env-vars
docker scan docker-compose.yml



