Docker Compose — это инструмент командной строки для определения и настройки многоконтейнерных приложений Docker. Иначе говоря, Docker Compose используется для связывания нескольких контейнеров и развертывания приложения из одного файла. Инструмент Docker Compose может использоваться в среде разработки, тестирования и подготовки, и, кроме того, может быть легко использован в рабочем процессе CI (Continuous Integration).
Предположим, вам требуется развернуть сайт на WordPress внутри контейнера — для его развертывания потребуется один контейнер веб-сервера (Apache/Nginx) и один контейнер базы данных (MySQL/MariaDB). С помощью Docker Compose есть возможность легко включить несколько контейнеров в файл docker-compose, а также любую другую конфигурацию, которая требуется для полноценной работы приложения.
В этой инструкции будет разобран процесс установки Docker Compose на существующий хост, содержащий Docker, а также будет затронута тема развертывания контейнеров командой docker-compose.
Предполагается, что хост с Docker уже настроен и работает. Перейдем к этапам установки Docker Compose Tool.
Этапы установки Docker Compose
Зайдите на свой хост, содержащий Docker, и по порядку запустите команды, перечисленные ниже:
[root@dockerserver ~]# yum install epel-release -y
[root@dockerserver ~]# yum install python-pip -y
[root@dockerserver ~]# pip install docker-compose
Примечание
[root@dockerserver~] # pip install --upgrade pip
Проверьте версию Docker командой:
[root@dockerserver~]# docker-compose --version
docker-compose version 1.25.4, build 8d51620a
[root@dockerserver ~]#
Развертывание контейнеров инструментом Docker Compose
Создайте каталог и в нем же файл compose с именем «docker-compose.yml» или «docker-compose.yaml». В файле compose мы определим сервисы для приложений и образы контейнеров.
Прежде чем приступить к созданию compose-файла, скачайте образы контейнеров WordPress и MySQL:
[root@dockerserver ~]# docker pull wordpress
[root@dockerserver ~]# docker pull mysql
[root@dockerserver ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress latest d44c65e8e9a3 9 days ago 540MB
mysql latest 9b51d9275906 3 weeks ago 547MB
Затем создайте каталог с именем «siteonwordpress»:
[root@dockerserver ~]# mkdir siteonwordpress
[root@dockerserver ~]# cd siteonwordpress/
[root@dockerserver siteonwordpress]#
Далее создайте файл docker-compose.yml с перечисленным содержимым:
version: '3.0'
services:
frontserver:
image: wordpress
container_name: wp_cont
ports:
- 8080:80
links:
- databaseserver:mysql
environment:
WORDPRESS_DB_PASSWORD: erf6UiwkzjTH
databaseserver:
image: mysql:latest
container_name: wordpressdb_cont
environment:
MYSQL_ROOT_PASSWORD: erf6UiwkzjTH
В приведенном выше файле compose были определены два сервиса с именами «frontserver» и «databaseserver». Для этих сервисов также указаны образы контейнера. Помимо этого были определены переменные среды и упомянуты пароли root mysql и db wordpress. Обращаем внимание, что отступы осуществляются пробелами, в соответствии с YAML-разметкой.
Давайте развернем наше приложение, то есть сайт на WordPress, с помощью команды:
[root@docker-host siteonwordpress]# docker-compose up
Примечание
Команда выше развернет два контейнера с именами «wp_cont» и «wordpressdb_cont». Попробуйте получить доступ к своему сайту WordPress, используя следующий URL:
http://{dockerserver-ip}:8080
Следуйте инструкциям на экране, чтобы завершить установку WordPress. Это подтверждает, что сайт WordPress был успешно развернут внутри контейнеров благодаря использованию утилиты docker-compose.
Далее рассмотрим параметры команды «docker-compose».
Вывод контейнеров, развернутых для нашего приложения
Для вывода выполните следующую команду:
[root@dockerserver siteonwordpress]# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
wordpressdb_cont docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
wp_cont docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
[root@dockerserver siteonwordpress]#
Остановка и запуск контейнеров и их служб
Можно нажать Ctrl+C во время выполнения «docker-compose up» или выполнить команду:
[root@dockerserver siteonwordpress]# docker-compose stop
Stopping wp_cont ... done
Stopping wordpressdb_cont ... done
[root@dockerserver siteonwordpress]#
Выполните команду «docker-compose start», чтобы запустить контейнеры и их службы:
[root@dockerserver siteonwordpress]# docker-compose start
Starting databaseserver ... done
Starting frontserver ... done
[root@dockerserver siteonwordpress]#
Просмотр журналов контейнеров
Чтобы просмотреть журналы контейнеров и журналы определенного контейнера, запустите команду «docker-compose logs {service-name}»:
[root@dockerserver siteonwordpress]# docker-compose logs
[root@dockerserver siteonwordpress]# docker-compose logs databaseserver
Остановить и удалить контейнеры вместе с созданной сетью
С помощью команды «docker-compose down» можно останавливать и удалять контейнеры, выполняя всего одну команду:
[root@dockerserver siteonwordpress]# docker-compose down
Stopping wp_cont ... done
Stopping wordpressdb_cont ... done
Removing wp_cont ... done
Removing wordpressdb_cont ... done
Removing network compose_default
[root@dockerserver siteonwordpress]#
Дополнительные параметры можно узнать в разделе помощи, выполнив команду «docker-compose –help».