Це машинний переклад, який може містити помилки!
Docker як автоматизація
За допомогою Compose ви описуєте бажане налаштування у файлі та дозволяєте Docker створювати контейнери. Спочатку ви починаєте з вебсервера Nginx із готового образу. Далі ви можете додати службу і перевірити, що створюється автоматично.
Перед початком: Docker Engine та Compose з [[Docker Level 1 - Ком i gang|Docker Level 1]] мають працювати. Виконайте docker compose version у віртуальній машині Linux. Вам не потрібна Flask-додаток, Dockerfile або акаунт GitHub. Довідник щодо YAML надає підтримку відступів і списків; його можна прочитати без того, щоб створити workflow на GitHub.
Спершу виконайте «Завдання 1» і перевірте відповідь веbservice. Оновлення — це посилання для майбутньої роботи. У «Завданні 2» ви можете спробувати кілька служб в одному проекті.
Що таке Docker Compose?
За допомогою Docker Compose ви описуєте одну або кілька служб у файлі. У цьому вправі кожна служба запускає один контейнер. Тут використовується файл docker-compose.yml.
compose.yaml і docker-compose.yml — це назви файлів, які підтримує Compose. Використовуйте один із них у теці проєкту та виконуйте команди з цієї теки. Тут використовується docker-compose.yml.
services:
web:
image: nginx:latest
ports:
- "127.0.0.1:8083:80"
Один приказ налаштовує все:
docker compose up -d
# Стартує сервіси Docker Compose у фоновому режимі
Файл Compose можна використовувати на іншому сервері, але вам також потрібно перемістити необхідні дані та локальні файли і налаштувати паролі, мережу та інші параметри. Теги, такі як latest, можуть пізніше вказувати на новий образ. Щоб збірки були однаковими, ви також маєте закріпити (зафіксувати) конкретний використаний образ.
Чому це автоматизація?
Подумайте про різницю:
| Ручне налаштування | З використанням Docker Compose |
|---|---|
| Встановіть Nginx вручну | image: nginx:latest |
| Налаштуйте порти | ports: "80:80" |
| Встановіть Grafana вручно | image: grafana/grafana:latest |
| Задокументуйте всі кроки | Опишіть бажану конфігурацію у файлі Compose |
| Повторіть все на наступному сервері | docker compose up -d |
Файл Compose є частиною технічної документації та описує бажане налаштування. Перевіряйте фактивний стан за допомогою docker compose ps і журналів. Обґрунтування, результати тестувань та процедури резервного копіювання мають бути задокументовано додатково.
Прочитайте приклад із невеликим об’ємом даних
services збирає сервіси. web — це ім’я, яке ми даємо веб-серверу. image вибирає готовий образ, тоді як ports зв’язує порт 8083 на адресі зворотного зв’язку віртуальної машини (VM) із портом 80 у контейнері. Тому тестуйте його безпосередньо з самої віртуальної машини. Побудова з вихідного коду описана в статті [[Докер Рівень 2 - Dockerfile і Compose|Докер Рівень 2]].
Корисні команди Docker
| Команда | Що вона робить |
|---|---|
docker compose up -d | Запускає всі служби у фоновому режимі |
docker compose down | Зупиняє та видаляє контейнери і мережі проєкту |
docker compose logs -f | Відстежує журнали в реальному часі |
docker compose pull | Отримує образи, на які посилаються теги проєкту |
docker compose restart | Перезапускає контейнери проєкту без зміни образу |
docker ps | Показує активні контейнери |
Коли службі потрібне зберігання даних
Збереження даних поза контейнером пояснює прив’язку каталогів (bind mount) та іменовані томи. Навчальний приклад із Nginx нижче не потребує бази даних чи зв’язків для зберігання. Використовуйте підтримку зберігання, перш ніж розширювати проєкт службою, яка має зберігати дані.
Оновлення сервісів
Оновити Docker-сервіс дуже просто:
# Отримати останню версію
docker compose pull
# Перезапустити з новою версією
docker compose up -d
Команда up -d використовує новий образ шляхом повторного створення контейнера. Перевірте працездатність сервісу після оновлення; нова версія образу може потребувати внесення змін у налаштування або дані.
Завдання 1 — Налаштування Nginx за допомогою Docker Compose
Робіть у консолі віртуальної машини. Створіть нову папку, щоб ця вправа не змінювала інший проєкт Compose:
mkdir compose-ovelse
cd compose-ovelse
nano docker-compose.yml
Якщо папка вже існує, відкрийте її та перевірте вміст перед продовженням. Запишіть приклад з Nginx із розділу «Що таке Docker Compose?» у файл. Збережіть за допомогою комбінації клавіш Ctrl+O, підтвердіть натисканням клавіші Enter і завершіть роботу за допомогою комбінації клавіш Ctrl+X. Перевірте та запустіть:
docker compose config --quiet
docker compose up -d
docker compose ps
curl http://127.0.0.1:8083
config --quiet має завершитися без помилок. Якщо ви виправите помилку у файлі, повторіть перевірку перед запуском. Команда ps повинна показувати web як активний процес, а команда curl — вміст Nginx із текстом «Welcome to nginx!».
Якщо порт зайнятий, оберіть інший вільний порт хоста у файлі та скористайтеся цим самим портом у команді curl. Якщо контейнер зупиняється, перегляньте журнал за допомогою команди docker compose logs web. Не створюйте новий проєкт у довільній папці для повторної спроби.
Поясніть перед продовженням: Який файл описує службу та що було створено командою docker compose up -d? Зупinite проєкт командою docker compose stop, перезапустіть його командою docker compose up -d і повторіть тест curl. Якщо ви використовуєте сторінку як підтримувану композицію Compose для іншого завдання, тепер можете повернутися до нього.
Завдання 2 – Додайте службу
Розширте docker-compose.yml із завдання 1 додатковою службою. Наприклад:
- Uptime Kuma на порту 3001
- Grafana на порту 3000
Використайте власну назву служби під services, з тим самим рівнем відступу, що й у web. Прочитайте офіційний приклад Docker для цієї служби, щоб визначити необхідні образ, порт та сховище даних. Використуйте вільний порт хоста та обмежте доступ до навчального середовища. Тег latest не є зафіксованою версією.
Спочатку виконайте docker compose config --quiet. Потім запустіть docker compose up -d і переконайтесь, що обидві служби працюють одночасно. Якщо ви використовуєте зв’язки повернення (reverse proxy), як це було зроблено для Nginx, перевіряйте порт з віртуальної машини; доступ з іншого пристрою потребує окремого узгодження адреси, порту та мережі.
Покажіть результат команди docker compose ps та очікуючу відповідь кожної служби за тією адресою та тим портом, які ви фактично налаштували. Усним або письмовим способом поясніть, що Compose створює автоматично, а що вам все ще потрібно налаштувати самостійно, наприклад дані, параметри конфігурації та резервне копіювання. Якщо одна служба зупиняється, прочитайте docker compose logs, перш ніж вносити зміни у конфігацію. Завершіть відстеження журналу натисканням Ctrl+C.
Підсумок
- Docker Compose дозволяє визначати кілька служб в одному файлі
- Файл Compose є одночасно конфігурацією та документацією
- Оновлення виконується за допомогою
docker compose pull+docker compose up -d - Docker полегшує переміщення служб між серверами
Джерела: Docker Compose: first project і Compose-служби.