Учебное пособие по Docker Compose

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

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

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

Предварительное условие

Мы предполагаем, что у вас есть базовое понимание Докер. В противном случае см. Как установить и использовать Docker в Ubuntu . В примерах используются WordPress, MySQL, Flask и Python. Однако никаких предварительных знаний об этих инструментах не требуется.

Процесс создания Docker: краткий обзор

  1. Определить среду приложения : используйте Dockerfile, чтобы определить среду приложения, чтобы сделать ее легко воспроизводимой.
  2. Определить среду составления Docker: используйте docker-compose.yml для определения служб в приложении.
  3. Run Application : используйте docker-compose up для запуска многоконтейнерного приложения.

Пример файла Docker Compose

 версия: '3'services: db: image: mysql: 5.7 тома: - db_data  :/var/lib/mysql restart: всегда среда: MYSQL_ROOT_PASSWORD: rootpassword123 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress_user MYSQL_PASSWORD: wordpress_password wordpress: depends_on: - образ базы данных: wordpress: последние порты: - «8000: 80» перезапуск: всегда среда: WORDPRESS  db: 3306 WORDPRESS_DB_USER: wordpress_user WORDPRESS_DB_PASSWORD: wordpres  s_passwordvolumes: db_data: 

Если указанный выше файл docker-compose.yml вызывается с поднятым докером, он создаст службу WordPress, которая подключается к службе базы данных MySQL.

Команды Docker Compose

Вы можете использовать docker-compose –help , чтобы найти команду Docker Compose

Когда использовать Docker Compose?

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

1. Прототипирование и разработка

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

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

2. Процессы тестирования и автоматизации

Непрерывная интеграция и непрерывная доставка (CI/CD) становятся стандартными процессами в современных средах гибкой разработки. Автоматическое тестирование — важный компонент CI/CD. Docker Compose помогает определить процесс автоматического тестирования. Все сложности, связанные с запуском новых сервисов, можно аккуратно поместить в файлы конфигурации докера. Тестировщики могут использовать эти файлы для запуска временных служб, запуска текстовых сценариев и уничтожения служб после сбора результатов тестирования. Это экономит время, поскольку запуск служб вручную требует времени и подвержен ошибкам.

3. Развертывание в производственной среде в будущем

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

Упражнение: простое веб-приложение

Давайте попробуем свои силы в простое веб-приложение на основе Python, позволяющее опробовать Docker Compose. Мы будем использовать веб-фреймворк Flask для создания приложения, которое взаимодействует с базой данных в памяти Redis, чтобы отслеживать, сколько раз веб-приложение было посещено.

Структура каталогов будет выглядеть следующим образом :

 simple_app├── content │ ├── Dockerfile│ └── code│ ├── simple_app.py │ └── requirements.txt └── docker-compose.yml 

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

Шаг 1. Создание структуры каталогов и файлов

Создадим структуру каталогов и необходимые файлы:

 $ mkdir simple_app $ mkdir simple_app/content $ mkdir simple_app/content/code $ touch simple_app/docker-compose.yml $ touch simple_app/ content/Dockerfile $ touch simple_app/content/code/simple_app.py $ touch simple_app/content/code/requirements.txt 

Команда touch просто создает пустые файлы. Вы можете вручную войти в папки и создать файлы.

Шаг 2: Код веб-приложения

Папка кода содержит код веб-приложения. Поместите в файл simple_app.py следующее:

 from flask import Flaskfrom redis import Redisapp = Flask (__ name __) redis = Redis (host = 'redis', port  = 6379) @ app.route ('/') def hello (): count = redis.incr ('hits') return ' Добро пожаловать в уроки создания Docker!  

У вас есть посетил этот сайт {} раз. n '. format (count) if __name__ == "__main__": app.run (host = "0.0.0.0", debug = True)

Приведенное выше приложение создает страницу приветствия, которая отображает количество раз страница была посещена. Счетчик посещений хранится в базе данных Redis. Redis использует порт 6379 в качестве порта прослушивания по умолчанию. Затем заполните файл requirements.txt :

 flaskredis 

Это позволит pip устанавливать зависимости Python в веб-контейнер . Мы запустим pip как часть инициализации нашей службы.

Шаг 3: Dockerfile

Заполните simple_app /content/Dockerfile со следующим кодом:

 FROM python: 3.6.3-jessieADD ./code/codeWORKDIR/codeRUN pip install -r requirements.txtCMD ["python", "  simple_app.py "] 

Приведенный выше Dockerfile обеспечивает следующее:

  1. Создает изображение из python: 3.6.3-Джесси. Если он недоступен локально, он загружает его из Docker Hub.
  2. Копирует элементы из simple_app/content/code в /code в контейнере
  3. Установить /code в качестве рабочего каталога в контейнере.
  4. Использует pip для установки зависимостей Python
  5. Устанавливает начальную точку по умолчанию для контейнера для запуска python simple_app.py .

Шаг 4. Docker Compose

Заполните файл simple_app/docker-compose.yml следующим кодом:

  версия: '3'services: web: build: ./content ports: - "5000: 5000" тома: - ./content/code:/code redis: image: "redis: alpine" 

Файл docker-compose.yml определяет два контейнера: web и redis. Он использует формат Docker Compose версии 3.

Для веб-службы:

  • Создает веб-службу с использованием simple_app/content/ Dockerfile
  • Перенаправляет порт 5000 из веб-контейнера на порт 5000 хоста. Порт 5000 является портом по умолчанию для приложений Flask.
  • Volume simple_app/content/code монтируется в контейнере как /code . Это означает, что если вы измените что-либо в simple_app/content/code , это будет отражено в папке /code веб-контейнера.

Для службы redis:

  • Использует образ redis: alpine из Docker Hub для создания службы redis.

Шаг 5. Запуск приложений с помощью Docker Compose

Приложение готово к развертыванию. В папке simple_app выполните следующую команду:

 $ docker-compose up 

Вывод должен начинаться следующим образом:

 $ docker-compose up Создание webStep 1/5: ИЗ python: 3.6.3-jessie3.6.3-jessie: Получение из библиотеки/python85b1f47fba49: Загрузка [===========  >] 12,43 МБ/52. 6MB5409e9a7fa9e: загрузка полная 661393707836: загрузка [===============>] 13,71 МБ/43,23 МБ1bb98c08d57e: загрузка [>] 1,081 МБ/134,7 МБ ... 

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

 Статус: загружено более новое изображение для redis: alpineСоздание simpleapp_redis_1 ... Создание simpleapp_web_1 ... Создание simpleapp_redis_1Создание simpleapp_web_1 ... doneПриложение  в simpleapp_redis_1, simpleapp_web_1redis_1 |  1: M 21 окт. 02: 06: 33.639 * Готово принимать соединенияweb_1 |  * Запускается http://0.0.0.0:5000/(для выхода нажмите CTRL + C) web_1 |  * Перезапуск с помощью statweb_1 |  * Отладчик активен! Web_1 |  * ПИН-код отладчика: 237-189-083 

Вы можете протестировать приложение, перейдя по адресу http://localhost: 5000 :. Если вы обновите страницу несколько раз, она должна отражать количество посещений. Вы можете проверить состояние запущенных служб или контейнеров:

 $ docker psCONTAINER ID IMAGE COMMAND СОЗДАНО СОСТОЯНИЕ ПОРТОВ ИМЕНИ22852e0ad98a redis: alpine "docker-entrypoint ..." 5 минут назад Up 5 минут 6379/tcp  simpleapp_redis_1d51739d0a3ac simpleapp_web "python simple_app.py" 5 минут назад Вверх 5 минут 0.0.0.0:5000->5000/tcp simpleapp_web_1 

Если вы запускаете оболочку bash в simpleapp_web_1 (имя вашего контейнера может отличаться), вы войдете в рабочий каталог/код:

 $ docker exec -it simpleapp_web_1 bash [email protected]:/code # lsrequirements.txt simple_app.py [email protected]:/code # 

Каталог /code должен отражать содержимое simple_app/content/code внутри него, как показано выше ( simple_app.py и requirements.txt ).

Если вы обновите свои simple_app.py строка из:

 return ' Добро пожаловать в уроки Docker Compose!  

У вас есть visi редактировал этот сайт {} раз. n'.format (count)

To:

 return ' Добро пожаловать на уроки Docker Compose!   

Вы заинтригованы?

Вы посещали этот сайт {} раз. n'.format (count)

Это должно отражаться на http://localhost: 5000:

Шаг 6: Завершение работы служб

Вы можете остановить приложение, используя:

 $ docker-compose stopStopping simpleapp_redis_1  ... doneОстановка simpleapp_web_1 ... done 

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

 $ docker-compose down --volumeRemoving simpleapp_redis_1 ... doneУдаление simpleapp_web_1 ... doneУдаление сети simpleapp_default 

Поздравляю! Вы освоили основы Docker Compose.

Дальнейшее изучение

Для дальнейшего изучения просмотрите следующую документацию:

  • Документация Docker
  • Справочник по файлу Docker Compose
  • Сеть Docker Compose

Ссылки:

  • https://docs.docker.com/compose/overview/#development-environments
  • https://docs .docker.com/compose/gettingstarted/
  • https://blog.codeship.com/orchestrate-containers-for-development-with-docker-compose/
  • https://www.sumologic.com/blog/devops/how-to-build-applications-docker-compose/
  • https://docs.docker.com/compose/wordpress/ # определить-проект
Оцените статью
nanomode.ru
Добавить комментарий