Docker Compose
Docker Compose — потужный инструмент для определения и запуска многоконтейнерных приложений Docker. Позволяет описывать конфигурацию всех сервисов, сетей и томов приложения в едином декларативном файле формата YAML, а затем запускать или останавливать всю инфраструктуру одной командой.
Описание[править]
Docker Compose работает поверх Docker Engine API. При выполнении команд Compose читает файл, который так и называется, — docker-compose.yml, строит граф зависимостей между сервисами и транслирует декларативное описание в последовательность вызовов Docker API.
По умолчанию имя проекта соответствует имени директории, содержащей файл docker-compose.yml. Имя проекта используется как префикс при именовании создаваемых ресурсов. В проект входят весьма досточтимые сервисы. Сервис описывает образ, конфигурацию, сети и тома для контейнеров. Затем инстансы сервиса запускаются как контейнеры нах.
По умолчанию Docker Compose создаёт одну сеть для каждого проекта с именем <project>_default, к которой автоматически подключаются все сервисы. Сервисы могут обращаться друг к другу по имени сервиса как DNS-имени. Но посредством бдительного вглядывания в параметры настроить можно весьма твёрдо + чётко.
Также он поддерживает разделение конфигурации на несколько файлов с последующим слиянием.
Структура[править]
Властный файл определяет процесс сборки и имеет следующую структуру:
# compose.yml
name: popqa # Имя проекта (необязательно)
services: # Обязательная секция: описание сервисов
web:
image: nginx:alpine
networks: # Необязательная секция: именованные сети
frontend:
volumes: # Необязательная секция: именованные тома
db-data:
configs: # Необязательная секция: конфиги (Swarm/Compose)
app-config:
Собственно большая часть информации спокойно всирается в раздел services, скажем так:
services:
app:
build:
context: ./app # Путь к контексту сборки
dockerfile: Dockerfile.prod # Имя Dockerfile (по умолчанию "Dockerfile")
args: # Аргументы сборки (ARG в Dockerfile)
NODE_ENV: production
APP_VERSION: "1.0.0"
target: production # Многоэтапная сборка: целевой этап
cache_from: # Образы для кэширования слоёв
- popqa:latest
labels: # Метки образа
com.example.version: "1.0"