Що таке docker compose і як він працює?
Автор: Редакція Domeny.ForSale Опубліковано
Коротко: Docker Compose — це інструмент для опису й запуску застосунків, що складаються з кількох контейнерів Docker. В одному файлі ви описуєте сервіси, їхні налаштування, з’єднання та місце зберігання даних, а потім запускаєте їх командою docker compose up. Це зручно, наприклад, коли проєкту потрібні застосунок, база даних і додаткова адміністративна панель.
Як Docker Compose взаємодіє з Docker
Docker запускає програми в контейнерах — ізольованих середовищах, які містять застосунок і потрібні йому залежності. Контейнер створюється з образу — готового пакета, що визначає, які компоненти мають запускатися. Compose не замінює Docker, а використовує його для керування набором пов’язаних контейнерів.
Без Compose можна запускати кожен контейнер окремою командою docker run, вручну вказуючи порти, змінні середовища та мережу. Compose дає змогу зберегти ці налаштування у файлі compose.yaml. Завдяки цьому конфігурацію можна зберігати разом із кодом проєкту й відтворити на іншому комп’ютері.
Основне поняття — сервіс, тобто опис конкретного складника середовища, наприклад бази даних. Compose створює контейнери на основі цих описів. За замовчуванням він також створює мережу проєкту, у якій сервіси можуть знаходити один одного за назвами.
Що містить файл compose.yaml
Конфігурацію записують у YAML — текстовому форматі, у якому структуру задають відступами. Відступи мають бути узгодженими; використовуйте для них пробіли, а не табуляцію.
Найчастіше трапляються такі елементи:
services— перелік сервісів, з яких складається середовище.image— образ, з якого буде запущено контейнер; альтернатива —build, що визначає спосіб збирання власного образу.ports— зіставлення порту комп’ютера з портом контейнера, яке забезпечує доступ до сервісу з-поза мережі контейнерів.environment— змінні середовища для налаштування програми.volumes— підключення каталогів або томів, тобто сховищ даних, які існують незалежно від життєвого циклу контейнера.
Сам запуск контейнерів ще не означає, що застосунок працює правильно. Базі даних може знадобитися час на ініціалізацію, а застосунок має вміти повторювати спроби з’єднання. depends_on може задавати порядок запуску, але в базовому вигляді не гарантує готовності сервісу. Для цього потрібно відповідно налаштувати перевірку стану — healthcheck — та умову залежності.
Приклад: PostgreSQL і панель для роботи з базою
Припустімо, ви хочете локально протестувати PostgreSQL, не встановлюючи базу даних безпосередньо в системі. Також вам потрібна панель Adminer, яка дає змогу переглядати дані в браузері. Створіть каталог проєкту й збережіть у ньому файл compose.yaml:
services:
db:
image: postgres:17
environment:
POSTGRES_USER: demo
POSTGRES_PASSWORD: lokalnyi_demo_parol
POSTGRES_DB: demo
volumes:
- db_data:/var/lib/postgresql/data
adminer:
image: adminer:5
ports:
- "127.0.0.1:8080:8080"
volumes:
db_data:
Запустіть середовище в цьому каталозі:
docker compose up -d
Параметр -d запускає контейнери у фоновому режимі. Під час першого запуску Docker завантажить образи, якщо їх немає локально.
Відкрийте в браузері адресу http://localhost:8080. У панелі виберіть PostgreSQL, вкажіть сервер db, користувача demo, пароль lokalnyi_demo_parol і базу даних demo. Якщо база ще ініціалізується, трохи зачекайте й повторіть спробу входу.
Назва db працює всередині мережі Compose. Не використовуйте там localhost: для контейнера Adminer ця адреса означала б сам контейнер Adminer, а не базу даних. У цьому прикладі порт PostgreSQL не відкрито на комп’ютері, а панель доступна лише через локальний інтерфейс комп’ютера.
Це навчальна конфігурація, а не готове рішення для промислової експлуатації. Не використовуйте пароль із прикладу для реальних даних і не зберігайте справжні секрети в репозиторії.
Команди для щоденної роботи
Сучасна команда має вигляд docker compose — із пробілом. Написання docker-compose, яке трапляється в старіших посібниках, стосується попереднього способу встановлення інструмента. Перевірити доступність Compose можна командою docker compose version. Якщо вона не працює, перевірте спосіб встановлення для своєї системи в офіційній документації Docker.
| Команда | Призначення |
|---|---|
docker compose ps | Показує контейнери проєкту та їхній стан. |
docker compose logs -f | Виводить журнали й відстежує нові повідомлення. |
docker compose stop | Зупиняє контейнери, не видаляючи їх. |
docker compose down | Видаляє контейнери та мережу проєкту, але за замовчуванням зберігає іменовані томи. |
docker compose config | Перевіряє та показує підсумкову конфігурацію. |
Будьте обережні з docker compose down -v: параметр -v також видаляє томи, якими керує проєкт, тож у цьому прикладі буде видалено дані бази. Том зберігає дані після видалення контейнера, але не замінює резервної копії.
Коли Compose достатньо, а коли — ні
Compose добре підходить для локальної розробки застосунків, тестування інтеграцій і простих розгортань на одному сервері. Він особливо корисний, коли кільком людям потрібно запускати однаковий набір сервісів без ручного відтворення налаштувань.
Сам по собі Compose не забезпечує керування кластером із багатьох серверів чи високої доступності. Для промислового розгортання потрібно окремо спланувати захист, резервне копіювання, моніторинг і оновлення образів. Тег образу, наприклад postgres:17, може вказувати на послідовні випуски в межах тієї самої гілки версій. Якщо потрібна точна відтворюваність, варто розглянути прив’язку образу до конкретного digest — ідентифікатора його вмісту.
Для початку запустіть приклад, перегляньте журнали й виконайте docker compose down, а потім знову docker compose up -d. Так ви на практиці побачите різницю між контейнером, який створюється заново, і даними, які зберігаються.
Дивіться також: Що таке ETF?
