Docker Compose — это мощный инструмент для определения и управления многоконтейнерными Docker-приложениями. Он позволяет описывать конфигурацию всех сервисов вашего приложения в одном YAML-файле и управлять ими с помощью простых команд. В этом руководстве мы подробно рассмотрим использование команды docker-compose
, доступные флаги и предоставим актуальный пример создания файла docker-compose.yml
.
Установка Docker Compose
Docker Compose обычно поставляется вместе с Docker. Чтобы проверить, установлен ли он, выполните команду:
docker-compose --version
Если Docker Compose не установлен, следуйте официальной инструкции по установке: https://docs.docker.com/compose/install/.
Создание файла docker-compose.yml
Файл docker-compose.yml
описывает конфигурацию вашего приложения, включая сервисы, сети и тома. Рассмотрим актуальный пример для веб-приложения, состоящего из фронтенда на React, бэкенда на Spring Boot, базы данных PostgreSQL и инструмента pgAdmin для управления базой данных:
version: '3.8'
services:
frontend:
image: node:14
working_dir: /app
volumes:
- ./frontend:/app
ports:
- "3000:3000"
command: ["npm", "start"]
depends_on:
- backend
backend:
image: openjdk:11
working_dir: /app
volumes:
- ./backend:/app
ports:
- "8080:8080"
command: ["./mvnw", "spring-boot:run"]
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydatabase
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
volumes:
- db_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: admin
ports:
- "5050:80"
depends_on:
- db
volumes:
db_data:
В этом примере:
- frontend: Сервис для фронтенда на React, использующий образ Node.js.
- backend: Сервис для бэкенда на Spring Boot, использующий образ OpenJDK.
- db: Сервис базы данных PostgreSQL.
- pgadmin: Инструмент pgAdmin для управления PostgreSQL.
Сервисы frontend
и backend
монтируют локальные директории ./frontend
и ./backend
соответственно в директорию /app
внутри контейнера. Это позволяет разрабатывать приложение на локальной машине и сразу видеть изменения.
Основные команды Docker Compose
- Запуск сервисов:
docker-compose up
Эта команда запускает все сервисы, определенные в
docker-compose.yml
. Добавление флага-d
переведет их в фоновый режим:docker-compose up -d
- Остановка сервисов:
docker-compose down
Останавливает и удаляет все запущенные контейнеры, сети и тома, созданные Docker Compose.
- Перезапуск сервисов:
docker-compose restart
Перезапускает все или указанные сервисы.
- Просмотр логов:
docker-compose logs
Выводит логи всех или указанного сервиса.
- Выполнение команды внутри контейнера:
docker-compose exec <service_name> <command>
Например, чтобы получить доступ к оболочке контейнера
backend
:docker-compose exec backend /bin/sh
Доступные флаги и опции
Команда docker-compose
поддерживает множество флагов и опций для управления сервисами. Рассмотрим основные из них:
-f, --file FILE
: Указывает альтернативный файл конфигурации. По умолчанию используетсяdocker-compose.yml
.docker-compose -f custom-compose.yml up
-p, --project-name NAME
: Задает имя проекта. По умолчанию используется имя текущей директории.docker-compose -p myproject up
--build
: Пересобирает образы перед запуском.docker-compose up --build
--force-recreate
: Принудительно пересоздает контейнеры, даже если их конфигурация не изменилась.docker-compose up --force-recreate
--no-deps
: Запускает указанные сервисы без их зависимостей.docker-compose up --no-deps service_name
-d, --detach
: Запускает контейнеры в фоновом режиме и выводит управление в консоль.docker-compose up -d
--scale SERVICE=NUM
: Масштабирует указанный сервис до заданного количества контейнеров.docker-compose up --scale web=3
--remove-orphans
: Удаляет контейнеры, не определенные в текущем файлеdocker-compose.yml
.docker-compose up --remove-orphans
-v, --verbose
: Включает подробный вывод для отладки.