• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Оглавление

Управление многокомпонентными разветвленными приложениями сталкивается с рядом сложностей, связанных с организацией связи между компонентами (контейнерами), планированием их работы и запуска на нескольких серверах или кластерах, восстановлением и развертыванием без остановки их работы и другими подобными проблемами. Решить эти проблемы помогает инструмент 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

Информация о сервисе Docker

Указанная команда выводит исчерпывающую информацию о сервисе Docker. В частности, сообщение «Client: Docker Engine – Community, Version: 24.0.2» говорит о том, что программа действительно уже установлена ??на сервере.

Перейдем к следующему шагу – установка Compose. Для этого введем следующую команду:

$ apt  install docker-compose

Установка Docker-compose

Подтвердим согласие на выделение дополнительных 2412 kB и продолжим процесс развертывания.

Процесс инсталяции docker-compose

Процесс инсталяции docker-compose

Плагин установлен. Проверим его версию с помощью параметра version:

$ docker-compose --version

Версия docker-compose

Итак, версия программы: 1.25.0. Теперь можно переходить к процессу создания и настройки нашего проекта.

Создание и настройка проекта

Нами будет создан и настроен новый веб-проект, предусматривающий потенциальную возможность сосуществования нескольких служб или контейнеров благодаря плагину Compose. В нашем конкретном случае в составе проекта будет присутствовать только одна служба – web, обеспечивающая наличие среды веб-сервера Nginx. После выполнения всех настроек будет продемонстрирована работа с проектом и вывод ее результатов в окне браузера.

Основными шагами, которые мы для этого осуществим, будут следующие:

  1. Подготовка структуры каталогов проекта;
  2. Создание кода главного файла приложения в формате html;
  3. Формирование управляющих инструкций файла docker-compose.yml;
  4. Запуск и тестирование проекта.

Создадим каталог проекта и перейдем к нему. Для этого введем в командной строке:

$ 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

Код файла docker-compose

Разберем приведенный код более подробно. Содержимое файла 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

В результате мы получили нужную информацию.

Теперь приостановим работу приложения. Это может пригодиться в некоторых случаях. Введем в терминале:

$ 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
navigate
go
exit
Спасибо, что выбираете FREEhost.UA