Поиск по сайту:

Как использовать приложение Docker для контейнеризации всего стека приложений


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

Зачем использовать приложение Docker?

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

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

Запуска docker run -d -p 80:80 wordpress:latest недостаточно, чтобы все заработало. У вас будет работающий WordPress, но без подключения к базе данных. Вы можете использовать Docker Compose для настройки стека с контейнером WordPress и контейнером MySQL. На вас лежит ответственность за создание и поддержку файла Compose, даже если каждый пользователь должен будет делать что-то подобное.

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

Внутренне приложение Docker реализует спецификацию Cloud Native Application Bundle (CNAB). Это межотраслевая попытка упростить определение, совместное использование и установку собственных облачных приложений с несколькими контейнерами. Он включает поддержку периферийных ресурсов, таких как тома и сети.

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

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

Создание стека приложений Docker

Вы можете использовать интерфейс командной строки Docker для инициализации нового стека приложений.

docker app init --single-file example-app

Это создаст новый файл с именем example-app.dockerapp в вашем рабочем каталоге. Аргумент --single-file указывает приложению Docker объединить все файлы проекта в один файл example-app.dockerapp. Без этого аргумента вы увидите три отдельных файла: docker-compose.yml, metadata.yml и parameters.yml.

Каждый составной файл представлен в объединенном отдельном файле в виде раздела YAML. Мы используем один файл, чтобы упростить фрагменты кода в этой статье; если вы планируете сложный стек приложений, использование нескольких файлов упростит сопровождение.

Вот что делает каждый из трех разделов:

  • docker-compose.yml – это обычный файл Docker Compose, определяющий контейнеры, из которых состоит ваше приложение.
  • metadata.yml — устанавливает основные метаданные о вашем приложении, такие как его имя, версия и описание. Вы используете его для описания всего стека приложений, а не какого-то одного контейнера.
  • parameters.yml — устанавливает параметры по умолчанию для переменных, используемых в вашем файле Docker Compose. Параметры определяются как простые пары ключ-значение. В вашем стеке будут использоваться эти параметры по умолчанию, если только пользователь не заменит их собственными значениями.

Единственная дополнительная настройка, необходимая помимо обычного файла Docker Compose, — это раздел метаданных. Если у вас уже есть файл Docker Compose, вы можете использовать docker app init с флагом --compose-file, чтобы импортировать его:

docker app init --compose-file docker-compose.yml example-app

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

Если у вас нет готового файла Docker Compose, добавьте несколько определений контейнеров в раздел Compose конфигурации.

# Application services - equivalent to docker-compose.yml.
---
services:
  apache:
    image: httpd:latest
    ports:
      - ${apache_port}:80
  mysql:
    image: mysql:latest
    ports:
      - ${mysql_port}:3306
    environment:
      - MYSQL_ROOT_PASSWORD=${mysql_root_password}
---
# Default application parameters - equivalent to parameters.yml.
apache_port: 80
mysql_port: 3306
mysql_root_password: mysql

Этот простой стек создает контейнеры Apache и MySQL. Для каждого контейнера необходимо настроить порт хоста для привязки. Контейнеру MySQL также необходимо значение для переменной MYSQL_ROOT_PASSWORD. Это используется MySQL во время первого запуска для установки пароля для начального пользователя root.

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

Создание образов приложений

Следующим шагом будет сборка вашего стека приложений Docker в пакет, совместимый с CNAB.

docker app build . -f example-app.dockerapp -t example-user/example-app:latest

Эта команда работает аналогично docker build. Будет создан пакет приложений с тегом example-user/example-app:latest. Теперь вы можете отправить этот пакет в Docker Hub!

docker app push example-user/example-app:latest

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

Запуск изображений приложений

Последняя часть — запустить экземпляр вашего стека:

docker app run example-user/example-app:latest --name my-app

Приложение Docker запустит новые контейнеры на основе определения в вашем комплекте приложений. Сам пакет приложений будет извлечен из Docker Hub, если он еще не существует на вашем компьютере.

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

Приложение будет запущено с переменными по умолчанию, определенными в его файле parameters.yml. Вы можете переопределить любые необходимые вам переменные с помощью флага --set:

docker app run example-user/example-app:latest --name my-app --set mysql_root_password=mysql

Вы можете изменить переменные запущенного приложения с помощью docker app update:

docker app update my-app --set my_variable=new_value

После запуска приложения вы можете использовать docker app ls для проверки его сведений. Используйте docker app rm my-app, чтобы уничтожить конкретное приложение по его имени. Это приведет к удалению всех ресурсов, связанных с приложением.

Заключение

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

Принятие приложения Docker, вероятно, останется низким, пока его статус в экосистеме Docker не будет подтвержден. Если Docker App выйдет из своего экспериментального положения, оно должно заполнить пробел между реестрами с одним контейнером и сложными облачными решениями для развертывания, такими как Helm.




Все права защищены. © Linux-Console.net • 2019-2024