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

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

Docker 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

Інформація про сервіс 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