Стаття також доступна російською (перейти до перегляду).
Вступ
- Що таке 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