Блог компанії 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. Дотримуйтесь найкращих практик і використовуйте його потужні можливості для створення масштабованих, підтримуваних і надійних додатків на основі контейнерів.