Блог компанії 3v-Hosting
Основи Docker-Compose
7 хв.
Що таке Docker-Compose
Docker-Compose - це потужний інструмент, що дає змогу розробникам і системним адміністраторам визначати та керувати багатоконтейнерними застосунками Docker. Він спрощує розгортання складних середовищ, використовуючи декларативний файл YAML для зазначення служб, мереж і томів. Замість того щоб запускати кілька команд docker run із заплутаними конфігураціями, Docker-Compose забезпечує спрощений підхід до ефективної організації контейнерів.
Підтримка і розгортання додатків у різних середовищах спрощується завдяки використанню єдиного файлу конфігурації (docker-compose.yml), що робить його найважливішим компонентом сучасних робочих процесів DevOps.
Ключові особливості Docker-Compose
Docker-Compose пропонує низку можливостей, які роблять його незамінним інструментом для роботи з контейнерними додатками:
Керування кількома контейнерами: Дозволяє визначати і запускати кілька взаємозалежних контейнерів в одному конфігураційному файлі.
Сервіс-орієнтована архітектура: Дозволяє використовувати підхід, заснований на мікросервісах, де кожен сервіс працює у своєму власному ізольованому контейнері.
Мережева взаємодія: Автоматично створює та керує мережами між певними сервісами, спрощуючи взаємодію.
Керування томами: Визначає постійне сховище для баз даних і додатків з певним станом.
Підтримка змінних оточення: Допомагає керувати різними конфігураціями для середовищ розробки, тестування та виробництва.
Масштабованість: Забезпечує горизонтальне масштабування сервісів за потреби.
Ведення журналів і налагодження: Надає структуровані журнали та інструменти налагодження для поліпшення спостережливості.
Встановлення Docker-Compose
Перед використанням Docker-Compose переконайтеся, що Docker встановлено у вашій системі. Docker-Compose входить до складу Docker Desktop, але для самостійної інсталяції виконайте наступні кроки:
Встановлення в Linux
sudo curl -L «https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)» -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Перевірте встановлення:
docker-compose --version
Встановлення на Windows і macOS
Для користувачів Windows і macOS Docker-Compose включено до складу Docker Desktop. Просто завантажте та встановіть Docker Desktop з офіційного сайту Docker.
Написання базового файлу docker-compose.yml
Файл docker-compose.yml визначає сервіси, мережі та томи для мультиконтейнерного застосунку. Нижче наведено приклад базової конфігурації для веб-додатка, що використовує Nginx і базу даних PostgreSQL:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: app_db
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data:
Запуск і керування сервісами за допомогою Docker-Compose
Запуск служб
Після того як файл docker-compose.yml налаштований, запустіть додаток за допомогою команди:
docker-compose up -d
Прапор -d запускає служби у від'єднаному режимі (фонове виконання).
Перегляд запущених сервісів
Перевірте стан запущених служб за допомогою команди:
docker-compose ps
Перегляд журналів
Переглядайте журнали служб за допомогою:
docker-compose logs -f
Зупинка служб
Щоб зупинити служби, виконайте команду:
docker-compose down
Ця команда зупиняє і видаляє всі контейнери, мережі та томи, визначені у файлі docker-compose.yml.
Інші корисні статті в нашому Блозі:
- Встановлення та використання Docker в Ubuntu 22.04
- Як створити власний Docker образ
- Як видаляти образи, контейнери та томи в Docker
- Що таке VPS чи VDS
Визначення мереж і томів
Користувацька конфігурація мережі
Docker-Compose дозволяє визначати користувацькі мережі для ізоляції сервісів:
networks:
frontend:
backend:
services:
app:
image: myapp:latest
networks:
- frontend
- backend
db:
image: mysql:latest
networks:
- backend
Постійне зберігання даних за допомогою томів
Томи забезпечують збереження даних під час перезапуску контейнерів:
volumes:
mysql_data:
services:
database:
image: mysql:latest
volumes:
- mysql_data:/var/lib/mysql
Використання змінних оточення в Docker-Compose
Для кращої конфігурованості змінні оточення можна зберігати у файлі .env і посилатися на них у файлі docker-compose.yml:
Файл .env:
POSTGRES_USER=admin
POSTGRES_PASSWORD=securepassword
Файл docker-compose.yml:
services:
db:
image: postgres:latest
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
Масштабування сервісів за допомогою Docker-Compose
Docker-Compose підтримує масштабування сервісів за допомогою прапора --scale:
docker-compose up --scale web=3 -d
Ця команда запускає три екземпляри веб-сервісу, розподіляючи трафік між ними.
Найкращі практики використання Docker-Compose
Зберігайте сервіси без статичних даних: Зберігайте постійні дані в томах, а не в контейнерах.
Використовуйте файли .env для конфігурації: Уникайте жорсткого кодування облікових даних у docker-compose.yml.
Використовуйте іменовані томи: Запобігання втрати даних під час оновлення контейнерів.
Визначте ліміти ресурсів: Вкажіть обмеження на пам'ять і процесор, щоб запобігти виснаженню ресурсів.
Реалізувати перевірку працездатності: Використовуйте healthcheck для моніторингу стану служб.
Приклад перевірки працездатності:
services:
db:
image: mysql:latest
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
retries: 3
Висновок
Docker-Compose - це найефективніший спосіб керування багатоконтейнерними додатками. Його структурований і декларативний підхід до конфігурування не має аналогів. Незалежно від того, розробляєте ви локальний застосунок, розгортаєте архітектуру мікросервісів або керуєте виробничою системою, Docker-Compose підвищить вашу ефективність завдяки оптимізації розгортання сервісів, роботи з мережами та зберігання даних.
Якщо ви інженер DevOps, розробник або системний адміністратор, який прагне оптимізувати свої контейнерні середовища, то вам необхідно зрозуміти основи Docker-Compose. Дотримуйтесь найкращих практик і використовуйте його потужні можливості для створення масштабованих, підтримуваних і надійних додатків на основі контейнерів.