Введение
Docker Compose — это незаменимый инструмент для разработчиков и специалистов по DevOps, стремящихся оптимизировать управление контейнерами и развертывание приложений. Этот исчерпывающий учебник предоставляет пошаговое руководство по пониманию и внедрению Docker Compose, охватывая все, от базовой конфигурации до продвинутых методов развертывания в различных средах.
Основы Docker Compose
Введение в Docker Compose
Docker Compose — мощный инструмент для определения и запуска многоконтейнерных приложений Docker. Он позволяет разработчикам использовать файл YAML для настройки сервисов приложения, сетей и томов, упрощая процесс оркестрации контейнеров.
Основные понятия
graph TD
A[Docker Compose] --> B[Определение сервиса]
A --> C[Управление многоконтейнерными приложениями]
A --> D[Настройка окружения]
| Ключевое понятие | Описание |
|---|---|
| Сервис | Отдельные контейнеры в приложении |
| docker-compose.yml | Файл конфигурации, определяющий сервисы |
| Тома | Постоянное хранилище данных для контейнеров |
| Сети | Взаимодействие между контейнерами |
Пример конфигурации Docker Compose
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
Практический пример на Ubuntu 22.04
Установка Docker Compose:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
Запуск многоконтейнерного приложения:
docker compose up -d
docker compose ps
docker compose down
Сферы применения
Docker Compose идеально подходит для:
- Локальных сред разработки
- Автоматизированных тестовых установок
- Развертывания приложений на одном хосте
- Архитектуры микросервисов
Конфигурация и Развертывание
Структура файла Docker Compose
graph TD
A[docker-compose.yml] --> B[Версия]
A --> C[Сервисы]
A --> D[Сети]
A --> E[Тома]
Пример Полной Конфигурации
version: "3.8"
services:
web:
image: python:3.9
build:
context: ./app
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./app:/app
environment:
- DEBUG=true
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
default:
driver: bridge
volumes:
postgres_data:
Управление Конфигурацией Окружения
| Тип Конфигурации | Описание | Использование |
|---|---|---|
| Переменные окружения | Конфигурация во время выполнения | Конфиденциальные данные, строки подключения |
| Файлы .env | Внешняя конфигурация окружения | Отделение конфигурации от кода |
| Секреты Docker | Защита конфиденциальной информации | Пароли, токены |
Команды Развертывания на Ubuntu 22.04
Проверка конфигурации:
docker compose config
Запуск сервисов:
docker compose up -d
Масштабирование сервисов:
docker compose up -d --scale web=3
Мониторинг сервисов:
docker compose ps
docker compose logs
Стратегии Сетей Контейнеров
graph LR
A[Сеть Контейнера] --> B[Сеть Bridge]
A --> C[Сеть Host]
A --> D[Сеть Overlay]
Методы Управления Томами
## Создание именованных томов
docker volume create myvolume
## Список томов
docker volume ls
## Просмотр деталей тома
docker volume inspect myvolume
Расширенные Техники Compose
Масштабирование Сервисов и Load Balancing
graph TD
A[Load Balancer] --> B[Сервис Репликация 1]
A --> C[Сервис Репликация 2]
A --> D[Сервис Репликация 3]
Настройка Масштабирования
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
ports:
- "80:80"
Динамическое Управление Сервисами
| Техника | Команда | Описание |
|---|---|---|
| Масштабирование Сервисов | docker compose up --scale web=5 |
Динамически настраивает количество контейнеров |
| Поэтапное Обновление | docker compose up --force-recreate |
Обновление сервисов с минимальным временем простоя |
| Выборочное Развертывание | docker compose up service1 service2 |
Развертывание определенных сервисов |
Стратегии Развертывания для Продукции
## Проверка конфигурации
docker compose config
## Сухой запуск развертывания
docker compose up --dry-run
## Развертывание в продакшене
docker compose up -d --remove-orphans
Проверка Здоровья Контейнеров
services:
web:
image: myapp:latest
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Расширенные Сети
graph LR
A[Пользовательская Сеть] --> B[Внутреннее Взаимодействие]
A --> C[Внешний Доступ]
A --> D[Обнаружение Сервисов]
Мониторинг и Логирование
## Логи сервисов в реальном времени
docker compose logs -f
## Мониторинг ресурсов
docker compose top
## Метрики производительности
docker stats
Конфигурация для Разных Окружений
version: "3.8"
services:
web:
image: myapp:${ENV:-development}
environment:
- DATABASE_URL=${DATABASE_URL}
Управление Секретами
## Создание секретов Docker
echo "database_password" | docker secret create db_password -
## Использование секретов в файле compose
services:
database:
secrets:
- db_password
Резюме
Овладение Docker Compose позволяет разработчикам упростить сложные архитектуры приложений, повысить согласованность развертывания и создать более масштабируемые и поддерживаемые контейнерные решения. Этот учебник демонстрирует, как использовать конфигурации YAML, управлять сервисами, сетями и томами, а также эффективно оркестрировать многоконтейнерные приложения с лёгкостью и эффективностью.



