Belov Solutions

Автоматизация с использованием Docker Compose: Руководство для разработчиков

Введение в автоматизацию с Docker Compose

Автоматизация процессов разработки становится ключевым фактором успеха в современном программировании. Инструмент Docker Compose (документация доступна на docs.docker.com/compose/) предлагает простой способ настройки и запуска сред разработки с использованием контейнеров Docker. Он использует файлы в формате YAML (YAML Ain’t Markup Language), чтобы описывать конфигурацию групп контейнеров, что позволяет минимизировать ручной труд, избежать ошибок и повторного написания кода. Хотя простые приложения, такие как наш текущий пример, могут не раскрыть всех преимуществ Compose, сложные проекты быстро демонстрируют его ценность, упрощая управление контейнерами, их запуск, обновление и остановку.

Что такое Docker Compose и зачем он нужен?

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

Если Docker установлен через Docker Toolbox (на macOS или Windows), Compose обычно уже доступен. В противном случае установите его, следуя инструкциям на docs.docker.com/compose/install. В этой статье используется версия 1.4.0, но основная функциональность поддерживается с версии 1.2 и выше.

Настройка базового проекта с Compose

Возьмем наш существующий проект identidock и добавим автоматизацию с помощью Compose. В корневом каталоге identidock создадим файл docker-compose.yml со следующим содержимым:

identidock:
  build: .
  ports:
    - "5000:5000"
  environment:
    ENV: DEV
  volumes:
    - ./app:/app
  • identidock: Имя сервиса (контейнера). В одном YAML-файле можно определить несколько сервисов.
  • build: .: Указывает, что образ создается из Dockerfile в текущем каталоге.
  • ports: — «5000:5000»: Аналог флага -p в docker run, связывает порт 5000 контейнера с портом 5000 хоста.
  • environment: ENV: DEV: Устанавливает переменную окружения ENV как DEV для запуска Flask в режиме разработки.
  • volumes: — ./app:/app: Монтирует подкаталог app хоста в /app контейнера для быстрого редактирования кода.

Этот файл заменяет предыдущие команды docker run и упрощает управление проектом.

Запуск и тестирование приложения

Запустите приложение с помощью команды:

$ docker-compose up
Creating identidock_identidock_1...
Attaching to identidock_identidock_1
identidock_1 | Running Development Server
identidock_1 | * Running on http://0.0.0.0:5000/
identidock_1 | * Restarting with reloader

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

$ curl localhost:5000
Hello Docker!

Для остановки используйте Ctrl+C. Для фонового режима добавьте флаг -d: docker-compose up -d.

Переключение между режимами разработки и эксплуатации

Чтобы переключиться на эксплуатационный режим с uWSGI, отредактируйте docker-compose.yml, изменив ports и environment:

identidock:
  build: .
  ports:
    - "9090:9090"
    - "9191:9191"
  environment:
    ENV: PROD
  volumes:
    - ./app:/app

Здесь порт 9090 используется для HTTP, а 9191 — для статистики uWSGI. Переменная ENV: PROD активирует эксплуатационный режим. После изменения выполните:

$ docker-compose up -d
$ curl localhost:9090
Hello Docker!

Альтернативно, создайте отдельный файл, например docker-compose-prod.yml, и используйте docker-compose -f docker-compose-prod.yml up -d.

Основные команды Docker Compose

Compose предоставляет набор команд для управления контейнерами. Вот основные из них:

  • up: Запускает все сервисы из YAML-файла. С флагом -d работает в фоновом режиме.
  • build: Пересоздает образы из Dockerfile. Используется при обновлении кода.
  • ps: Показывает состояние контейнеров.
  • run: Выполняет одноразовую команду в контейнере (без создания портов по умолчанию).
  • logs: Выводит логи всех контейнеров с цветной подсветкой.
  • stop: Останавливает контейнеры без удаления.
  • rm: Удаляет остановленные контейнеры (с флагом -v удаляет тома).

Типичный рабочий процесс: docker-compose up -d для запуска, docker-compose logs и ps для мониторинга, docker-compose build и up -d при изменении кода. Для принудительного пересоздания используйте --force-recreate.

Расширенные возможности и лучшие практики

Compose поддерживает дополнительные параметры, такие как depends_on для определения зависимостей между сервисами и networks для настройки сетей. Пример с зависимостью базы данных:

version: '2'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
    depends_on:
      - db
  db:
    image: postgres:9.4
    environment:
      POSTGRES_DB: mydb

Рекомендуется хранить конфигурацию в отдельном файле .env для переменных окружения:

ENV=DEV
PORT=5000

Импортируйте его с env_file: .env в docker-compose.yml. Это улучшает переносимость и безопасность.

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

При изменении кода выполните docker-compose build, затем docker-compose up -d. Если данные в томах (например, базы данных) должны сохраняться, убедитесь, что тома монтируются корректно. Для отладки используйте docker-compose logs и добавьте логирование в код, как показано ранее.

Заключение

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

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована