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