Docker, лекция 15. Оркестровка с использованием Docker Compose
При работе с несколькими контейнерами может быть сложно управлять запуском, а также настройкой переменных и ссылок. Чтобы решить эту проблему, в Docker имеется инструмент под названием Docker Compose для управления оркестровкой, запуском контейнеров.
Посетите https://docs.docker.com/compose/install/ для получения инструкций о том, как установить docker compose в вашей локальной среде.
Определение первого контейнера
Docker Compose основан на файле docker-compose.yml. Этот файл определяет все контейнеры и параметры, необходимые для запуска набора кластеров. Cвойства отображаются в зависимости от того, как вы используете команды docker run, теперь хранятся в системе контроля версий и совместно используются с вашим кодом.
Формат файла основан на YAML (Yet Another Markup Language).
container_name: property: value - or options
В этом сценарии у нас есть приложение Node.js, которое требует подключения к Redis. Для начала нам нужно определить наш файл docker-compose.yml для запуска приложения Node.js.
Учитывая приведенный выше формат, в файле необходимо присвоить имя контейнера «web» и установить для свойства сборки текущий каталог. Мы рассмотрим другие свойства в следующих шагах. Итого:
web: build: .
Определение настроек
Docker Compose поддерживает все свойства, которые можно определить с помощью Docker Run.
Чтобы связать два контейнера вместе, укажите свойство links и перечислите необходимые соединения. Например, следующее будет ссылаться на контейнер источника redis, определенный в том же файле, и присвоить псевдониму то же имя. Так же пробросим порты.
web: build: . links: - redis ports: - "3000" - "8000"
Дополнительная информация тут — https://docs.docker.com/compose/compose-file/
Определение второго контейнера
На предыдущем шаге мы использовали Dockerfile в текущем каталоге в качестве базы для нашего контейнера. На этом этапе мы хотим использовать существующий образ из Docker Hub в качестве второго контейнера.
Формат YAML достаточно гибок, чтобы определять несколько контейнеров в одном файле.
web: build: . links: - redis ports: - "3000" - "8000" - "3001" redis: image: redis:alpine volumes: - /var/redis/data:/data
Запуск
С созданным файлом docker-compose.yml вы можете запускать все приложения с помощью одной команды up. Если вы хотите вызвать один контейнер, вы можете использовать up <имя>.
Аргумент -d указывает, что контейнеры запускаются в фоновом режиме, аналогично тому, как это используется в Docker run.
docker-compose up -d
Управление
Docker Compose не только может управлять начальными контейнерами, но также предоставляет способ управления всеми контейнерами с помощью одной команды.
Например, чтобы увидеть детали запущенных контейнеров, вы можете использовать docker-compose ps.
Для доступа ко всем журналам через один поток вы используете docker-compose logs.
Другие команды следуют той же схеме. Получите их, набрав docker-compose
Docker Scale
Поскольку Docker Compose понимает, как запускать контейнеры вашего приложения, его также можно использовать для масштабирования количества работающих контейнеров.
Параметр масштаба позволяет указать службу, а затем количество экземпляров, которые вы хотите. Если это число превышает количество уже запущенных экземпляров, он запустит дополнительные контейнеры. Если число меньше, то остановит ненужные контейнеры. Увеличим количество web контейнеров.
docker-compose scale web=3
Так же ничего не мешает уменьшить их количество:
docker-compose scale web=3
Остановка и удаление
Как и при запуске приложения, для остановки набора контейнеров вы можете использовать команду docker-compose stop.
Чтобы удалить все контейнеры, используйте команду docker-compose rm.