Docker-compose - утилита позволяющая создавать, собирать, запускать сервисы из нескольких контейнеров. Она упращает нам работу с докером без частых команд создания,сборки и т.п. Конфигурация строиться yml файломпо умолчанию ищет docker-compose.yml в текущей папке.
Самое удобное как обычнос офф сайта
Можно установить через pip pip install docker-compose
Первое что нужно сделать это изменить nginx Dockerfile на multistage build добавив в начало файла frontend Dockerfile и сменив изображение из которого копируем данные
Cоздадим docker-compose.yml в папке docker пример docker-compose.yml.
Разберем команды:
version '3'
указывает какубюю версию yml конфига нужно будет воспринимать утилитеnetworks
тут перечисляем сети которые будем использоватьservices
список сервисов
расмотрим сервисcontainer_name
имя контейнераbuild
указывает как будем собирать контейнер аналогично командеdocker build
restart
указывает политику перезапуска контейнераports
показывает какие порты будут из вне как опция-p
уdocker run
depends_on
показывает нам очередность запуска т.е. сначлаа запустится сервис изdepends_on
потом сам сервис т.к. по умолчанию сервисы создаются и запускаются в разнобой а могут быть зависемые сервисыnetworks
указывает в какие сети сможет иметь доступ сервис кстаит alias внутри сети по умолчанию это название сервисаlogging
как будет логироваться докер контейнер
В yml файлах можно использовать переменные окружения
С помощью этой утилиты мым ожем выполнять все операции что и утилита docker
но над сервисами из указанного файла.
Часты команды
up
команда для запуска сервисов, моно указать конкретно какие запустить Важные опции-d
аналогичноdocker run -d
только для сервисов--build
указываеь что нужно пересобрать контейнеры
- аналогичные docker команды управления сервисом start,stop,rm,restart
Давайте запустим наше приложение
docker-compose -f docker/docker-compose.yml up -d --build
- Смотрим что все работет примерно такое должны увидеть
и все, не нужно запускать много команд а просто достуточно настроить один yml файл
- При старте сервисов все контейнеры выключаются
- Если произошла ошибка старта контейнера ничего не вернется на место и придется перезапускать
- Нельзя добавлять свои кастомные команды
- Достаточно не удобная настройка через yml файл, приходится использовать либо очень много yml файлов либо альтернативные утилиты для проброса вирт окружений makefile,cmake и подобное