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

3v-Hosting Team

Автор

3v-Hosting Team

Команда 3v-Hosting складається з групи відданих своїй справі інженерів та операторів, які повністю присвятили себе створенню та підтримці основи наших сервісів. Щодня ми занурюємося у світ віртуальних та виділених серверів, займаючись усім, від розгортання та моніторингу до усунення реальних проблем, що виникають у виробничих середовищах. Більшість наших статей ґрунтуються на практичному досвіді, а не лише на теорії. Ми ділимося своїми думками щодо викликів, з якими стикаємося: перебоїв у роботі, помилок у налаштуваннях, складнощів мережевої взаємодії та архітектурних рішень, що впливають на стабільність і надійність. Наша місія проста - ми хочемо ділитися знаннями, які допоможуть вам керувати своїми проектами з меншою кількістю несподіванок та набагато більшою передбачуваністю.

Як перенести сайт WordPress на VPS
Як перенести сайт WordPress на VPS

Як перенести сайт WordPress на VPS без Docker чи Kubernetes. Покроковий посібник з використанням Nginx, MariaDB, HTTPS, порадами з оптимізації та поширеними пом...

16 хв
Як виправити помилку HTTP 504 (Gateway Timeout)
Як виправити помилку HTTP 504 (Gateway Timeout)

Дізнайтеся, що означає помилка HTTP 504 Gateway Timeout, чому вона виникає в Nginx, Cloudflare, Docker та Kubernetes, а також як правильно діагностувати та усун...

16 хв