• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Изучение базовых команд разветвленной системы управления приложениями Docker

Оглавление

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

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

Несмотря на разнообразие существующих средств разработки разветвленных приложений, далеко не все из них отвечают OCI (Open Container Initiative) – стандарту виртуализации на уровне операционной системы (ОС). Некоторые вообще его игнорируют, другие соответствуют только одной из двух имеющихся спецификаций OCI – времени исполнения (runtime) или образа (image). Именно указанный стандарт открывает перспективы создания автономных, независимых от любой платформы сред разработки и выполнения кода.

Ключевым отличием указанных сред от «обычных» виртуальных машин является значительная их компактность и кроссплатформенность, то есть полная независимость от оборудования. На уровне операционной системы здесь образуется общая виртуальная среда для всех отдельных независимых модулей или контейнеров, которые в ней запускаются и работают. Каждый такой контейнер, по сути, представляет собой отдельную виртуальную машину со своей мини средой и настройками. Он активизируется сразу же после запуска своего образа – специального шаблона, содержащего исходный код вместе с определениями любых программных зависимостей и библиотек. Контейнеры являются более мобильными сущностями по сравнению с классическими виртуальными машинами. Управление их работой в пределах общей виртуальной машины производится с помощью набора базовых команд среды разработки.

Стандарт OCI и определяет правила формирования общей среды выполнения для контейнеров (runc), а также правила создания, сохранения и обработки их образов.Стандарт OCI и определяет правила формирования общей среды выполнения для контейнеров (runc), а также правила создания, сохранения и обработки их образов.

Платформа Docker – одна из основных реализаций указанного стандарта наряда с системой Podman от компании Red Hat. Основным отличием между ними является наличие у Docker общего демона для всех контейнеров, в то время как у Podman общий процесс отсутствует и, соответственно, контейнеры запускаются только как дочерние процессы. Также отличаются подходы к управлению системой – у Docker по умолчанию управление системой устанавливается только для root-доступа, в то время как у Podman «работает» обычный доступ. Хотя в последнее время и у Docker появился rootless-режим, то есть здесь системы почти сравнялись.

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

Существует много промежуточных разработок, которые обеспечивают сервисные функции для работы некоторых из модулей Docker-системы. К примеру, в AWS уже реализован высокопроизводительный сервис управления контейнерами ECS (Amazon Elastic Container Service). А многие хостер-провайдеры имеют собственные шаблоны программы. К примеру, компания FREEhost.UA имеет собственный шаблон VPS с Docker на основе ОС Debian, который можно развернуть в один клик.

Релизы Docker выпускаются двух видов – свободно распространяемое программное обеспечение (Community Edition) и для коммерческого использования (Enterprise). Он поддерживает работу в большинстве существующих операционных систем – Mac, Windows, Linux и других. В частности, Ubuntu Docker CE поддерживает следующие программы-драйверы для хранилищ образов: Overlay2, btrfs и aufs, что создает весьма комфортные условия для работы с ним именно в среде Linux-систем.

Развертывание среды Docker на Ubuntu

Установим «с нуля» Docker CE на ОС Ubuntu. Устанавливать программу будем из официального репозитория Docker, а не из репозитория Ubuntu, чтобы гарантированно получить последнюю версию программы. Последовательность действий будет следующей:

  • Обновление версий пакетов ОС;
  • Установка пакетов, необходимых для работы менеджера apt через протокол https;
  • Копирование в нашу систему ключа GPGиз официального репозитория Docker для возможности производить загрузку;
  • Установка и развертывание программы.

Итак, обновим версии пакетов нашей ОС. Для этого наберем в терминале команды:

$ sudo apt update

Обновление пакетов ОС.

$ apt list –upgradable

Перечень обновлений

Перечень обновлений

Установим дополнительные пакеты для менеджера apt:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

Обновление пакетов менеджера apt

Добавим ключ из репозитория Docker:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Добавление ключа Docker

Добавим репозиторий программы к источникам apt-менеджера. Это расширит базу пакетов нашей системы за счет новых пакетов Docker:

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Подключение репозитория Docker к менеджеру apt

Теперь нужно убедиться, что загрузка будет осуществляться именно с официального репозитория программы, вместо репозитория Ubuntu, который, как известно, установлен по умолчанию. Для этого наберем соответствующую команду:

apt-cache policy docker-ce

Проверка источника репозитория

Проверка источника репозитория

В результате мы получили список подготовленных к закачке менеджером пакетов ресурсов, где указан адрес именно официального репозитория:

https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

Это означает, что пакеты будут загружены с указанного адреса, что нам и нужно.

Теперь начнем процесс установки программы. Наберем в терминале:

sudo apt install docker-ce

Инсталяция Docker

После подтверждения согласия на выделение дополнительных 401 Mb процесс инсталляции продолжится:

Процесс инсталации Docker

Процесс инсталации Docker

Как видим, процесс инсталляции успешно завершен. Теперь проверим статус программы, чтобы убедиться, что главный процесс запущен и программа готова к выполнению задач. Введем:

$ sudo systemctl status docker

Проверка статуса программы

Можно видеть, что процесс запущен, PID = 630938. Также указан путь к месту сохранения информации для группы Docker. Следует отметить, что для возможности пользоваться сервисом необходимо иметь права root или быть членом соответствующей группы. Поэтому целесообразно заранее добавить пользователей программы в указанную группу. К примеру, добавим пользователя нашей системы с именем new_user в группу Docker. Это можно сделать с помощью следующей конструкции:

$ sudo usermod -aG docker new_user

Добавление нового пользователя к группе docker

Всё прошло успешно. После этого указанный пользователь сможет управлять приложением, не вводя команды sudo.

Запуск и использование справочной системы Docker

Общий формат запуска приложения выглядит следующим образом:

docker [опції] [команда] [аргументи]

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

$ docker

Запуск Docker

Чтобы просмотреть параметры определенной команды, например, images (работа с образами) введем в терминале:

$ docker images --help

Просмотр справки для команды images

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

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

$ docker info

Справка Docker

Справка Docker

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

Управление контейнерами в среде Docker

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

Например, попробуем найти образ ОС Ubuntu. Для этого введем:

$ docker search ubuntu

Поиск образа Ubuntu

Мы видим, что у репозитории есть несколько вариантов шаблонов для ОС Ubuntu, которые при желании мы можем загрузить на локаль. Загрузим официальную версию Ubuntu с помощью следующей конструкции:

$ docker pull ubuntu

Загрузка Ubuntu

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

$ docker search perl

Поиск шаблона perl

Теперь загрузим на машину официальную версию языка perl, обозначенную ОК в разделе OFFICIAL:

$ docker pull perl

Загрузка Perl

Следовательно, еще один шаблон есть в нашем распоряжении. Кстати, все доступные шаблоны мы можем теперь просмотреть с помощью инструкции images:

$ docker images

Список загрузки образов

Как видим, каждому шаблону присваивается свой идентификатор, чтобы им потом можно было управлять – запускать, удалять и т. д. Теперь с помощью конструкции run попытаемся запустить какой-нибудь из шаблонов для превращения его в рабочий контейнер в среде Docker. Введем в терминале:

$ docker run -it perl

Запуск шаблона perl

Аргумент -it позволил нам включить интерактивный режим работы с нашим контейнером. В данном случае мы получили интерактивный отладчик языка perl. Просмотрим справочную информацию по отладчику с помощью инструкции h:

Справка по отладчику

При помощи композиции клавиш Ctrl+D выйдем из интерактивного режима работы с контейнером perl.

Так же запустим контейнер для ОС Ubuntu:

$ docker run -it ubuntu

Запуск контейнера Ubuntu

Обратите внимание на его идентификатор после символа «@». Его мы затем используем для управления модулем. Теперь мы можем работать с Ubuntu в отдельном контейнере. Для примера, инсталлируем язык java

$ apt install java

Установка Java

Инсталляция прошла удачно. Теперь выйдем из него:

$ exit

Виход из контейенра

Теперь мы снова в нашей обычной среде Ubuntu.

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

docker ps

Проверка активности контейнеров

Следовательно, активен только модуль из Ubuntu. Теперь выведем все имеющиеся в системе контейнеры:

docker ps -a

Список всех контейнеров в наличии

Их оказалось три – два из perl и один из Ubuntu. Теперь выясним, какой из них запускался последним:

$ docker ps -l

Последний контейнер который запускался

Это контейнер с идентификатором 270c0219c951. Теперь запустим его еще раз:

$ docker start confident_wozniak

Запуск контейнера по ID

Обратите внимание, что для управления контейнерами можно использовать как числовые идентификаторы, так и символьные (указанные в столбце NAME).

Запустим еще один модуль с языком perl:

$ docker start peaceful_snyder

Запуск еще одного контейнера perl

После этого проверим список активных модулей:

docker ps

Список активных модулей

Можно убедиться, что их уже три – два из perl и один из Ubuntu. Остановим последний с помощью его идентификатора:

$ docker stop 4939fb8b85fd

Остановка контейнера по ID

Проверим список активных:

Список активных контейнеров

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

Теперь попробуем реализовать обратную задачу – создать из модифицированного контейнера новый шаблон, то есть образ. Общий формат такой команды выглядит следующим образом:

docker commit -m "Описание внесенных изменений" -a "Имя автора" container_id repository/new_image_name

Где repository/new_image_name – путь к месту сохранения нового шаблона; container_id – идентификатор модуля.

Создадим новый шаблон на основе внесенных нами изменений в контейнер с Ubuntu. Для этого введем в терминале:

$ docker commit -m "added Java" -a "new_user" 4939fb8b85fd new_user/ubuntu-java

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

Убедимся, что количество наших шаблонов увеличилось:

$ docker images

Список всех шаблонов

Таким образом мы получили новый шаблон с Ubuntu на базе внесенных нами изменений в запущенный контейнер.

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

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

Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем-то ошиблись, или что-то пропустили?

Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.

Дата: 02.06.2023
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA