Що таке Docker Compose?

Docker Compose — це інструмент, який спрощує роботу з багатоконтейнерними застосунками в Docker. Він дозволяє визначати та керувати кількома взаємопов’язаними сервісами за допомогою єдиного конфігураційного файлу у форматі YAML.
Історія Docker Compose починається у 2014 році, коли Docker створив цей інструмент для спрощеного розгортання складних застосунків. Спочатку він викликався за командою docker-compose
. З випуском версії 2, Compose був інтегрований безпосередньо в Docker CLI, що дозволило використовувати команду docker compose
(без дефіса).
Ключові можливості Docker Compose
- Спрощене керування контейнерами
З Compose ти можеш запустити весь стек застосунку лише однією командою:
docker compose up -d
Створює всі необхідні контейнери, запускає їх у правильному порядку та об’єднує їх в одну мережу, щоб вони «бачили» один одного.
- Використання
docker-compose.yml
Файл docker-compose.yml
— це серце Docker Compose. У ньому ти описуєш, які сервіси має запускати Docker, які образи використовувати, змінні середовища та залежності між контейнерами.
Приклад docker-compose.yml:
version: '3'
services:
app:
build:
context: .
command: >
sh -c "python manage.py wait_for_db &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
- Запуск багатоконтейнерних застосунків
Docker Compose дозволяє запускати всі сервіси одночасно, налаштовувати їхню взаємодію та зберігати дані. Можна швидко масштабувати застосунок і додавати нові екземпляри сервісів.
Основні директиви
Конфігураційний файл docker-compose.yml містить набір директив. Директиви — це ключові параметри, що визначають, які контейнери будуть запущені, як вони будуть взаємодіяти між собою, де зберігатимуть дані та які ресурси використають. Ось ті, які зустрічаються найчастіше:
version
— вказує версію синтаксису Docker Compose.services
— перелік контейнерів, які складають застосунок.image
— визначає, який контейнерний образ використовувати.build
— дозволяє створювати контейнер із Dockerfile.ports
— відкриває доступ до контейнера через певні порти.environment
— задає змінні середовища для контейнера.volumes
— зберігає дані між перезапусками контейнера.networks
— налаштовує зв’язок між контейнерами.depends_on
— задає порядок запуску сервісів.
Переваги та недоліки Docker Compose
Спершу розгляньмо переваги інструменту:
- Запуск застосунку вимагає лише одного файлу
docker-compose.yml
і однієї команди. - Конфігурація однакова для розробників як тестового, так і продакшн середовища, тож проблем із сумісністю немає.
- Підтримка змінних середовищ, мереж, томів та різних параметрів запуску дозволяє легко адаптувати застосунок до різних умов.
- Не потрібно вручну налаштовувати зв’язки між сервісами, оскільки вони автоматично об’єднуються в спільну мережу.
- Можна швидко додавати екземпляри сервісів, що зручно для тестування навантаження або розподілених систем.
Мінуси Docker Compose:
- У масштабних системах із десятками мікросервісів краще використовувати Kubernetes, оскільки Compose не підтримує автоматичне балансування навантаження та складне оркестрування.
- Compose не керує контейнерами у кластері, а працює лише на одному хості, що обмежує його використання для розподілених систем.
- Хоча можна керувати мережами та правами доступу, у порівнянні з Kubernetes, Docker Compose має менше механізмів захисту та ізоляції контейнерів.
Як Docker Compose використовують DevOps-інженери?
Docker Compose допомагає створювати та управляти багатоконтейнерними середовищами, що є необхідним для процесів CI/CD. Завдяки Docker Compose, ти можеш швидко відтворити продакшн-середовище на локальній машині та тестувати застосунок з усіма потрібними сервісами. Наприклад базами даних чи вебсервісами. Тобто те, що працює локально буде працювати й на сервері, зменшуючи ймовірність багів при розгортанні.
Docker Compose відіграє важливу роль в автоматизації тестування та розгортанні. Він спрощує налаштування середовища для автоматичних тестів, що знижує час на підготовку і забезпечує більш стабільні й передбачувані результати. Завдяки такій автоматизації, команди DevOps-інженерів можуть зосередитися на інших важливих аспектах роботи, а сам процес розгортання стає значно швидшим і безпечнішим.
Корисні посилання
Документація Docker Compose на офіційному сайті Docker
Покрокова інструкція: як встановити та використовувати Docker Compose
Docker Swarm vs Kubernetes: що обрати?
Опануй Docker Compose за одне заняття на курсі «Docker. Практикум з адміністрування».