Начальное руководство по установке и использованию Docker Compose

DockerBeginner
Практиковаться сейчас

Введение

Это руководство для начинающих проведет вас через процесс установки Docker и Docker Compose, а также научит вас использовать Compose для определения, развертывания и управления вашими приложениями. Вы узнаете о ключевых функциях и параметрах конфигурации, доступных в Docker Compose, а также о лучших практиках масштабирования и балансировки нагрузки ваших приложений Compose.

Что такое Docker Compose?

Docker Compose — это инструмент, позволяющий определять и запускать многоконтейнерные приложения Docker. Он упрощает управление и оркестрацию нескольких контейнеров Docker, предоставляя декларативный способ определения служб, сетей и томов приложения.

С помощью Docker Compose вы можете:

Определять службы вашего приложения

Вы можете определить различные службы, составляющие ваше приложение, такие как веб-сервер, база данных и очередь сообщений, в одном файле YAML. Этот файл, называемый «файлом Compose», описывает конфигурацию каждой службы, включая используемый образ Docker, открываемые сетевые порты и любые переменные окружения или тома для монтирования.

Управлять жизненным циклом вашего приложения

Docker Compose предоставляет команды для запуска, остановки и управления жизненным циклом всего вашего приложения. Вы можете использовать docker-compose up для создания и запуска всех служб, определенных в вашем файле Compose, и docker-compose down для остановки и удаления этих служб.

Упростить разработку и тестирование

Docker Compose особенно полезен на этапах разработки и тестирования вашего приложения. Он позволяет легко создать полную среду разработки со всеми необходимыми службами, что упрощает тестирование вашего приложения в согласованном и воспроизводимом виде.

graph TD A[Разработчик] --> B[Docker Compose] B --> C[Веб-сервер] B --> D[База данных] B --> E[Очередь сообщений]

Используя Docker Compose, вы можете гарантировать, что ваше приложение работает одинаково в разных средах, от разработки до производства, снижая риск проблем, специфичных для среды.

Служба Изображение Порты Окружение
Веб-сервер nginx:latest 80:80 -
База данных mysql:5.7 3306:3306 MYSQL_ROOT_PASSWORD=password
Очередь сообщений rabbitmq:3-management 5672:5672, 15672:15672 -

В заключение, Docker Compose — мощный инструмент, который упрощает управление и развертывание многоконтейнерных приложений Docker, что облегчает разработку, тестирование и запуск сложных приложений в согласованном и воспроизводимом виде.

Установка Docker и Docker Compose

Прежде чем начать использовать Docker Compose, вам необходимо установить Docker и Docker Compose на вашей системе. В этом разделе мы покажем вам процесс установки на системе Ubuntu 22.04.

Установка Docker

  1. Обновите индекс пакетов:
sudo apt-get update
  1. Установите необходимые пакеты, чтобы разрешить APT использовать репозиторий через HTTPS:
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. Добавьте официальный ключ GPG Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Настройте репозиторий Docker:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Установите Docker Engine:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Проверьте установку, выполнив следующую команду:
sudo docker run hello-world

Установка Docker Compose

Docker Compose устанавливается как часть процесса установки Docker Engine на Ubuntu 22.04. Однако, если вам нужно установить определённую версию Docker Compose, вы можете выполнить следующие шаги:

  1. Скачайте последнюю версию Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Примените разрешения на выполнение к бинарному файлу Docker Compose:
sudo chmod +x /usr/local/bin/docker-compose
  1. Проверьте установку, выполнив следующую команду:
docker-compose --version

Теперь, когда Docker и Docker Compose установлены, вы готовы начать определение и развертывание ваших многоконтейнерных приложений с помощью Docker Compose.

Определение служб в файле Compose

Сердцем приложения Docker Compose является файл Compose, написанный в формате YAML. В этом файле вы определяете различные службы, составляющие ваше приложение, вместе с их конфигурациями.

Определение службы

Каждая служба в вашем файле Compose определяется как ключевое слово верхнего уровня, например, web, db или redis. Под каждой службой вы можете указать различные параметры конфигурации, такие как используемый образ Docker, открываемые сетевые порты, переменные окружения и многое другое.

Вот пример простого файла Compose с тремя службами:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./app:/usr/share/nginx/html

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql

  redis:
    image: redis:latest
    ports:
      - 6379:6379

volumes:
  db-data:

В этом примере у нас есть три службы:

  1. web: Запускает последнюю версию веб-сервера Nginx, отображает порт 80 на хосте на порт 80 в контейнере и монтирует директорию ./app на хосте в директорию /usr/share/nginx/html в контейнере.

  2. db: Запускает базу данных MySQL 5.7, устанавливает переменную окружения MYSQL_ROOT_PASSWORD со значением password и монтирует именованный том db-data для хранения данных базы данных.

  3. redis: Запускает последнюю версию кэша Redis, отображает порт 6379 на хосте на порт 6379 в контейнере.

Тома и сети

Помимо определения служб, файл Compose также позволяет определять общие тома и сети, которые могут использоваться службами.

В примере выше мы определили именованный том db-data для хранения данных базы данных MySQL. Этот том может быть общим для нескольких служб, гарантируя, что данные сохраняются даже если контейнеры останавливаются или пересоздаются.

Вы также можете определить пользовательские сети для управления подключением между вашими службами. Это полезно, когда вы хотите изолировать определенные службы или создать более сложную топологию сети.

Используя файл Compose, вы можете легко определять и управлять различными компонентами вашего приложения, что упрощает развертывание, масштабирование и обслуживание ваших многоконтейнерных приложений Docker.

Развертывание и управление приложениями Compose

После определения ваших служб в файле Compose, вы можете использовать команды Docker Compose для развертывания и управления вашим приложением.

Развертывание приложения

Для развертывания приложения перейдите в директорию, содержащую ваш файл Compose, и выполните следующую команду:

docker-compose up -d

Флаг -d запускает контейнеры в отсоединенном режиме, что означает, что они будут работать в фоновом режиме.

Docker Compose прочитает файл Compose, создаст необходимые Docker сети и тома, и запустит все определенные службы.

Управление жизненным циклом приложения

После развертывания приложения вы можете использовать следующие команды Docker Compose для управления его жизненным циклом:

  • docker-compose stop: Останавливает все запущенные службы.
  • docker-compose start: Запускает остановленные службы.
  • docker-compose restart: Перезапускает все запущенные службы.
  • docker-compose down: Останавливает и удаляет все службы, сети и тома.

Например, чтобы остановить приложение, вы можете выполнить:

docker-compose stop

А чтобы запустить его снова, вы можете выполнить:

docker-compose start

Масштабирование служб

Docker Compose упрощает масштабирование ваших служб вверх или вниз. Для масштабирования конкретной службы вы можете использовать команду scale:

docker-compose scale web=3 db=2

Это позволит масштабировать службу web до 3 экземпляров, а службу db до 2 экземпляров.

Вы также можете использовать команду up со флагом --scale, чтобы масштабировать службы при развертывании приложения:

docker-compose up --scale web=3 --scale db=2 -d

Просмотр логов

Для просмотра логов вашего приложения вы можете использовать команду logs:

docker-compose logs

Это отобразит логи всех служб. Вы также можете просмотреть логи конкретной службы, указав имя службы:

docker-compose logs web

Используя эти команды Docker Compose, вы можете легко развертывать, управлять и масштабировать свои многоконтейнерные приложения, что упрощает разработку, тестирование и запуск сложных приложений последовательным и воспроизводимым способом.

Расширенные возможности и конфигурация Compose

Хотя базовая структура и команды Compose мощны, Docker Compose также предлагает ряд расширенных функций и параметров конфигурации, которые помогут вам создавать более сложные и надежные приложения.

Переменные окружения и секреты

Вы можете использовать переменные окружения для передачи параметров конфигурации вашим службам. Docker Compose поддерживает переменные окружения как на этапе сборки, так и на этапе выполнения, которые могут быть определены на уровне службы или глобальном уровне.

Кроме того, вы можете использовать Docker Secrets для безопасного хранения конфиденциальной информации, такой как пароли баз данных или ключи API, и предоставлять ее вашим службам.

version: "3"
services:
  web:
    image: myapp/web
    environment:
      - DATABASE_URL=mysql://root:${DB_PASSWORD}@db/myapp
    secrets:
      - db-password

secrets:
  db-password:
    file: ./db-password.txt

Управление зависимостями и проверки работоспособности

Docker Compose позволяет определять зависимости между службами, гарантируя, что службы запускаются в правильном порядке и что зависимые службы работоспособны перед запуском других служб.

Вы также можете настроить проверки работоспособности для ваших служб, которые позволяют Compose отслеживать состояние ваших контейнеров и принимать соответствующие действия, такие как перезапуск неработоспособных контейнеров.

version: "3"
services:
  web:
    image: myapp/web
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

  db:
    image: mysql:5.7
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

Сети и обнаружение служб

Docker Compose автоматически создает стандартную сеть для вашего приложения, но вы также можете определить пользовательские сети и контролировать сетевую конфигурацию для ваших служб.

Кроме того, Compose предоставляет встроенное обнаружение служб, позволяющее вашим службам находить и взаимодействовать друг с другом, используя имена служб, определенные в файле Compose.

version: "3"
services:
  web:
    image: myapp/web
    networks:
      - frontend
    environment:
      - DB_HOST=db

  db:
    image: mysql:5.7
    networks:
      - backend

networks:
  frontend:
  backend:

Используя эти расширенные возможности, вы можете создавать более сложные, устойчивые и масштабируемые приложения Docker Compose, которые соответствуют потребностям вашей организации.

Масштабирование и балансировка нагрузки с Compose

Одним из ключевых преимуществ использования Docker Compose является возможность легко масштабировать ваши службы и реализовывать балансировку нагрузки. В этом разделе мы рассмотрим, как достичь этих возможностей.

Масштабирование служб

Как упоминалось ранее, вы можете масштабировать свои службы вверх или вниз с помощью команды scale. Это особенно полезно, когда вам нужно справиться с увеличением трафика или потребностями в ресурсах.

Например, предположим, что у вас есть веб-служба, определенная в вашем файле Compose:

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80

Чтобы масштабировать службу web до 3 экземпляров, вы можете выполнить следующую команду:

docker-compose scale web=3

Это создаст два дополнительных экземпляра службы web, позволяя распределять нагрузку между несколькими контейнерами.

Балансировка нагрузки

Docker Compose также предоставляет встроенные возможности балансировки нагрузки. Когда вы определяете несколько экземпляров службы, Compose автоматически распределяет входящие запросы между доступными контейнерами.

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

В этом примере мы определили службу web с 3 репликами. При выполнении docker-compose up Compose создаст три экземпляра службы web и распределит входящие запросы между ними.

Вы также можете настроить дополнительные параметры балансировки нагрузки, такие как политика перезапуска, чтобы гарантировать, что ваше приложение остается высокодоступным.

graph TD A[Клиент] --> B[Балансировщик нагрузки] B --> C[Веб-сервис 1] B --> D[Веб-сервис 2] B --> E[Веб-сервис 3]

Используя возможности масштабирования и балансировки нагрузки Docker Compose, вы можете создавать высокомасштабируемые и устойчивые приложения, которые могут обрабатывать увеличение трафика и потребностей в ресурсах.

Устранение неполадок и лучшие практики

Как и с любой технологией, при работе с Docker Compose вы можете столкнуться с проблемами или трудностями. В этом разделе мы рассмотрим некоторые распространенные шаги по устранению неполадок и лучшие практики, которые помогут вам эффективно управлять вашими приложениями на основе Compose.

Устранение неполадок

  1. Проверка журналов: Если у вас возникли проблемы с вашим приложением Compose, первым шагом является проверка журналов с помощью команды docker-compose logs. Это поможет вам определить любые ошибки или проблемы с вашими службами.

  2. Просмотр контейнеров: Вы можете использовать команду docker-compose ps, чтобы перечислить запущенные контейнеры и их состояние. Это может помочь вам определить любые контейнеры, которые не работают как ожидалось.

  3. Отладка служб: Если определенная служба ведет себя не так, как ожидалось, вы можете использовать команду docker-compose exec, чтобы получить доступ к контейнеру и отладить проблему. Например, docker-compose exec web bash предоставит вам оболочку внутри контейнера службы web.

  4. Проверка конфигурации: Тщательно проверьте свой файл Compose, чтобы убедиться, что определения служб, конфигурации сети и настройки томов корректны. Вы можете использовать команду docker-compose config, чтобы проверить синтаксис и структуру вашего файла Compose.

Лучшие практики

  1. Использование переменных окружения: Используйте переменные окружения для хранения параметров конфигурации, таких как учетные данные базы данных или ключи API. Это упрощает управление конфиденциальной информацией и адаптацию вашего приложения к различным средам.

  2. Разделение задач: Подумайте о разделении вашего приложения на более мелкие и управляемые службы. Это упростит масштабирование, поддержку и тестирование отдельных компонентов вашего приложения.

  3. Реализация проверок работоспособности: Настройте проверки работоспособности для ваших служб, чтобы убедиться, что контейнеры работают правильно. Это поможет Compose отслеживать состояние вашего приложения и принимать соответствующие действия, такие как перезапуск неисправных контейнеров.

  4. Управление файлом Compose с помощью системы контроля версий: Храните свой файл Compose в системе контроля версий, такой как Git. Это поможет вам отслеживать изменения, сотрудничать с членами команды и обеспечивать согласованные развертывания в разных средах.

  5. Рациональное использование сетей: Используйте пользовательские сети для изоляции и управления подключением между вашими службами. Это может улучшить безопасность и производительность вашего приложения.

  6. Использование LabEx: Рассмотрите возможность использования LabEx, мощной платформы, которая предоставляет дополнительные функции и инструменты для повышения вашего опыта работы с Docker Compose. LabEx может помочь вам оптимизировать развертывание, мониторинг и управление вашими приложениями на основе Compose.

Следуя этим шагам по устранению неполадок и лучшим практикам, вы можете эффективно управлять и поддерживать свои приложения Docker Compose, гарантируя их плавную и надежную работу в различных средах.

Резюме

К концу этого руководства вы получите глубокое понимание того, как установить и использовать Docker Compose для оптимизации развертывания и управления вашими приложениями. Вы сможете определять свои службы, развертывать и управлять приложениями Compose, а также устранять любые возникающие проблемы. Независимо от того, являетесь ли вы новичком в Docker или стремитесь улучшить свои навыки работы с Compose, это руководство предоставит вам необходимые знания и инструменты для начала работы с Docker Compose.