Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Что такое Docker Compose
- Область применения
- Развертывание Compose
- Создание и настройка проекта
- Управление работой веб-приложения
Управление многокомпонентными разветвленными приложениями сталкивается с рядом сложностей, связанных с организацией связи между компонентами (контейнерами), планированием их работы и запуска на нескольких серверах или кластерах, восстановлением и развертыванием без остановки их работы и другими подобными проблемами. Решить эти проблемы помогает инструмент Docker Compose, позволяющий облегчить процесс оркестрирования контейнеров в пределах рабочей среды. Рассмотрим это средство более подробно.
Что такое Docker Compose
Compose является надстройкой или плагином для Docker Engine и позволяет управлять многоконтейнерными приложениями, в то время как сервис Docker способен обеспечить работу приложения, сформированного только на базе одного контейнера в пределах рабочей среды.
Функциональность Compose реализуется благодаря набору директив или параметров в файле с именем docker-compose.yml, который используется для определения структуры приложения. Основные директивы, доступные для формирования структуры приложения, приведены ниже:
- Шаблоны;
- Собиратели шаблонов;
- Службы;
- Сети;
- Томы;
- Масштабирование;
- Сменные среды;
- Порты.
Шаблоны (image) – то данные и настройки контейнеров, хранящихся в компактном формате.
Собиратели шаблонов (build) активизируют процесс сборки шаблона на основе контекста сборки, путь к которому указывается в качестве значения указанной директивы.
Службы (services) являются основой многоконтейнерного приложения и определяют отдельные экземпляры контейнеров, созданных на базе Docker-шаблонов.
Сети (networks) обеспечивают постоянную связь между службами. Базовые сети между службами создаются автоматически, но при необходимости всегда можно определить дополнительные сети с отдельными настройками.
Томы (volumes) являются средством для хранения данных, используемых контейнерами, а также позволяют организовать совместный доступ к данным для отдельных служб.
Масштабирование (scale) позволяет регулировать нагрузку на систему за счет регулирования количества экземпляров контейнера для определенной службы.
Переменные среды (environment) позволяют адаптировать развертывание приложения под разные среды разработки или выполнения.
Порты (ports). Используется для настройки перенаправления запросов из портов хост-компьютера на порты соответствующих контейнеров.
Область примерения
Использование Docker вместе с плагином Compose позволяет обеспечить следующие возможности для разработчиков:
- Разработка приложений в пределах локальной среды. Позволяет создать локальную рабочую копию приложения на локальных машинах для разработки и последующего тестирования и согласования проекта с другими участниками проекта.
- Непрерывная интеграция и развертывание. Дает возможность интегрироваться в конвейеры CI/CD для оптимизации процесса разработки многокомпонентных приложений.
- Использование микрослужб. Позволяет координировать совместную работу компонентов приложения и соответственно обеспечить эффективное управление приложением в целом.
Развертывание Compose
На удаленном сервере установлена ??операционная система Ubuntu 20.04. Для работы плагина Compose необходимо наличие виртуальной среды Docker Engine. Убедимся, что указанный сервис уже установлен. Для этого введем в терминале:
$ docker info
Указанная команда выводит исчерпывающую информацию о сервисе Docker. В частности, сообщение «Client: Docker Engine – Community, Version: 24.0.2» говорит о том, что программа действительно уже установлена ??на сервере.
Перейдем к следующему шагу – установка Compose. Для этого введем следующую команду:
$ apt install docker-compose
Подтвердим согласие на выделение дополнительных 2412 kB и продолжим процесс развертывания.
Плагин установлен. Проверим его версию с помощью параметра version:
$ docker-compose --version
Итак, версия программы: 1.25.0. Теперь можно переходить к процессу создания и настройки нашего проекта.
Создание и настройка проекта
Нами будет создан и настроен новый веб-проект, предусматривающий потенциальную возможность сосуществования нескольких служб или контейнеров благодаря плагину Compose. В нашем конкретном случае в составе проекта будет присутствовать только одна служба – web, обеспечивающая наличие среды веб-сервера Nginx. После выполнения всех настроек будет продемонстрирована работа с проектом и вывод ее результатов в окне браузера.
Основными шагами, которые мы для этого осуществим, будут следующие:
- Подготовка структуры каталогов проекта;
- Создание кода главного файла приложения в формате html;
- Формирование управляющих инструкций файла docker-compose.yml;
- Запуск и тестирование проекта.
Создадим каталог проекта и перейдем к нему. Для этого введем в командной строке:
$ mkdir compose-lesson $ cd compose-lesson
Создадим каталог для web службы с именем app_server:
$ mkdir app_server
Создадим главный файл приложения с помощью редактора nano и добавим к нему код, приведенный ниже:
$ nano app_server/index.html
Код индексного файла приложения выглядит следующим образом:
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Практика по созданию, настройке и работе в среде Docker Compose</title> </head> <body> <h1>Это демонстрационная страница для web службы приложения, построенного на плагине Docker Compose.</h1> <p>Этот контент обслуживается контейнером веб-сервера Nginx. </p> <p> Здесь отображаются все изменения, вносимые в индексный файл проекта.</p> </body> </html>
Сохраним внесенные изменения (ctrl+O, Ent) и выйдем из редактора (ctrl+X).
Сформируем файл docker-compose и вставим соответствующий код:
$ nano docker-compose.yml
Код:
version: '3.7' services: web: image: nginx:alpine ports: - "8000:80" volumes: - ./app_server:/usr/share/nginx/html
Разберем приведенный код более подробно. Содержимое файла Compose для любого проекта начинается с установки его версии с помощью тега version, определяющего версию конфигурации и, соответственно, влияющего на результаты обработки кода. Более подробно о доступных версиях файла Compose можно прочитать в соответствующем разделе документации Compose.
Следующая строка кода открывается разделом Services (служби), в рамках которого перечисляются все службы приложения. В нашем случае присутствует единая служба под названием web.
В рамках службы определены параметры ее настроек, включающие: названия портов для перенаправления запросов (ports), определение шаблона (image), место хранения данных (volumes).
В нашем случае определение шаблона для создания контейнера выглядит следующим образом: nginx:alpine. Номера портов: 8000:80. Для сохранения данных приложения определено следующее место: ./app_server:/usr/share/nginx/html.
Программа будет искать указанный нами шаблон сначала на локальной машине, а затем в открытом каталоге для сохранения шаблонов Docker установленного в системе Docker по умолчанию. Если бы мы не знали, что шаблон с указанным именем существует, тогда нам нужно было бы настроить наш сценарий на формирование нового шаблона на основе контекста сборки. Для этого нам нужно было бы воспользоваться следующей конструкцией:
build: ./web
Где build – команда создания шаблонов; «./web» – контекст сборки для нового шаблона, определяющий все необходимые для его формирования данные и настройки.
Сохраним изменения и выйдем из редактора.
Теперь, когда файл создан, мы можем запустить Docker Compose для возможности получения настроенной среды приложения, с которым мы планируем работать. При этом будет загружен нужный шаблон и создан контейнер для службы с именем web. Воспользуемся соответствующей командой, которая запустит процесс в фоновом режиме:
$ docker-compose up –d
В результате, было издано сообщение о создании сети связи со стандартным драйвером: «Creating network "compose-lesson_default" with the default driver».
Выведена информация о статусе процесса загрузки шаблона веб-сервера: «Status: Downloaded newer image for nginx:alpine».
Сообщено о создании программной среды для нашего проекта: «Creating compose-lesson_web_1 ... done».
Убедимся, что среда активна. Для этого введем в терминале:
$ docker-compose ps
Эта команда, в частности, позволяет просмотреть статус проекта (State) и настройки портов (Ports). Итак, проект запущен.
Просмотрим результаты работы кода главного файла проекта в окне обозревателя. Для этого наберем в адресной строке IP-адрес удаленного хоста и укажем номер соответствующего порта:
http://178.20.159.96:8000/
Можно убедиться, что проект работает, поскольку браузер корректно отображает код индексного файла.
Теперь внесем изменения в файл index.html и проверим, сохранятся ли они. Для этого отредактируем его, добавив в конец новую строчку кода с уведомлением, приведенным ниже. Вызовем редактор nano:
$ nano app_server/index.html
Новая строчка кода:
<h2>Эта строчка появилась как результат внесения первых изменений в файл index.html, которые были учтены средой разработки на базе Docker Compose.</h2>
Сохраним изменения и закроем файл. После чего обновим окно нашего проекта в браузере:
http://178.20.159.96:8000/
Можно убедиться, что новый код появился. Итак, теперь с ним можно работать.
Управление работой веб-приложения
Продемонстрируем работу нескольких команд по управлению приложением. Прежде всего, пересмотрим логи:
$ docker-compose logs
В результате мы получили нужную информацию.
Теперь приостановим работу приложения. Это может пригодиться в некоторых случаях. Введем в терминале:
$ docker-compose pause
При попытке обновить окно проекта в браузере во время действия указанной команды результат будет неудачным, поскольку проект временно заблокирован. Для того чтобы разблокировать его работу, необходимо воспользоваться следующей конструкцией:
$ docker-compose unpause
Только после этого работу с приложением можно будет продолжить.
Теперь полностью остановим работу контейнера, но при этом все данные сохранятся:
$ docker-compose stop
Теперь удалим все контейнеры, сети и тома приложения. Это можно сделать с помощью следующей команды:
$ docker-compose down
В результате получили сообщение об удалении контейнера и удалении сети связи:
«Removing compose-lesson_web_1», «Removing network compose-lesson_default»
При необходимости мы можем полностью удалить базовый шаблон приложения. Это можно сделать с помощью следующей команды:
$ docker image rm nginx:alpine
Таким образом, у нас достаточно широкие возможности по управлению многокомпонентным приложением, построенным на основе Docker Compose.
Приглашаем Вас воспользоваться нашим шаблоном ВПС хостинга с Docker. Гарантия доступности 99.99%, размещение в Украине или Польше, автоматические резервные копии круглосуточная техническая поддержка.
Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем-то ошиблись, или что-то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обсудим Ваши замечания и предложения.
Дата: 11.07.2023 Автор: Евгений
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus