Управление и мониторинг контейнеров Docker с помощью dry в Ubuntu 16.04

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

Читайте также:

dry может быстро запускать и останавливать контейнеры, безопасно или принудительно удалять образы Docker, постоянно отслеживать процессы контейнера в реальном времени и получать доступ к выводам команд info, inspect, history и log.

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

Данный мануал поможет установить и dry и расскажет о таких важных функциях:

  • Взаимодействие с контейнерами, образами и сетями Docker,
  • Мониторинг контейнеров Docker и
  • Взаимодействие с нодами и сервисами Docker Swarm (опционально).

Требования

1: Установка dry

Установите dry на сервер Docker. Последнюю версию dry можно найти на странице GitHub.

Загрузите последний релиз файла dry-linux-amd64 (на момент написания мануала это v0.9-beta.3).

wget https://github.com/moncho/dry/releases/download/v0.9-beta.3/dry-linux-amd64

Переместите и переименуйте бинарный файл с dry-linux-amd64 в /usr/local/bin/dry.

sudo mv dry-linux-amd64 /usr/local/bin/dry

Каталог /usr/local/bin – это стандартное расположение для хранения бинарных файлов локальных программ сервера. Перемещение файлов dry в этот каталог также дает возможность вызывать команду dry в любом месте сервера, потому что этот каталог включен в переменную среды $PATH.

Читайте также: Чтение и установка переменных среды и оболочки на сервере Linux

Измените права на файл, сделав его исполняемым.

sudo chmod 755 /usr/local/bin/dry

Протестируйте dry, запустив команду с флагом –v:

dry -v

Команда вернет версию и детали сборки:

dry version 0.9-beta.2, build d4d7a789

2: Взаимодействие с контейнерами Docker

Запустите dry, чтобы получить доступ к дашбордам в терминале:

dry

В начале дашборда мониторинга есть информация о сервере и программном обеспечении Docker на нем (например версия Docker, версия API Docker Engine, имя и ресурсы сервера), независимо от того, является ли сервер рабочей нодой или менеджером Docker Swarm.

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

[H]:Help [Q]:Quit | [F1]:Sort [F2]:Toggle Show Containers [F5]:Refresh [%]:Filter |
[m]:Monitor mode [2]:Images [3]:Networks [4]:Nodes [5]:Services | [Enter]:Commands

В любое время вы можете нажать F5 для обновления экрана dry при возникновении ошибок с его рендерингом.

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

Если вы используете стек контейнеров WordPress, MariaDB и PHPMyAdmin (из требований), вы увидите эти три только что созданных контейнера.

Используйте клавиши со стрелками вверх и вниз на клавиатуре, чтобы выбрать контейнер WordPress, затем нажмите Enter.

Это отобразит информацию о контейнере в верхней части экрана (его порты, сетевые ссылки и IP-адрес контейнера).

Container Name:  wordpress_wordpress_1                    ID:       f67f9914b57e       Status:  Up 13 minutes
Image:           wordpress                                Created:  About an hour ago
Command:         docker-entrypoint.sh apache2-foreground
Port mapping:    0.0.0.0:8080->80/tcp
Network Name:    bridge
IP Address:     172.17.0.3
Labels           6

Выбрав контейнер, вы также увидите новый список доступных опций:

  • Fetch logs – эквивалент команды Docker Engine (docker logs). Она полезна при устранении неполадок и ошибок в контейнерах.
  • Kill container, которая позволяет убить контейнер, если он не отвечает или не может завершить работу правильно.
  • Remove container, которая помогает удалить ненужные контейнеры.
  • Inspect container – эквивалент команды docker container inspect.
  • Restart останавливает и перезапускает контейнер (это гораздо быстрее, чем вводить команды Docker Engine для перезапуска и запроса состояния контейнера).
  • Show image history выводит список команд, использованных для запуска контейнера. Эти «слои» генерируются во время процесса сборки образа и являются результатом команд  действий, перечисленных в файле Dockerfile. С помощью этой опции можно увидеть, как именно был сгенерирован контейнер с использованием базового образа Docker.
  •  Stats + Top включает в себя разную информацию (использование ЦП, потребление памяти, входящий и исходящий сетевой трафик, работа файловой системы, общие идентификаторы процесса и время безотказной работы контейнера). Также эта опция включает в себя список процессов, который функционально идентичен выводу top.
  • Stop останавливает контейнер. Вы можете использовать F2, чтобы в списке Containers отображались включенные и остановленные контейнеры (currently stopped and active). Перезапустить остановленный контейнер можно с помощью опции Restart.

Важно! Опции Kill container и Remove container выполняются без подтверждения, будьте осторожны.

Нажмите клавишу Esc, чтобы вернуться в корневой раздел дашборда Containers. Теперь нужно рассмотреть раздел Images.

3: Взаимодействие с образами Docker

В разделе Containers нажмите 2, чтобы перейти в раздел Images.

Этот раздел предлагает более простой доступ к команде docker image inspect. В dry есть также удобные сочетания клавиш, которые вы можете увидеть в навигационной панели:

  • Ctrl + D (Remove Dangling): повисшие тома – это тома, на которые больше не ссылается ни один контейнер, и потому избыточны. Обычно в Docker в командной строке эта операция включает в себя команду docker volume rm и флаг dangling=true плюс целевые тома данных.
  • Ctrl + E (Remove): эквивалент docker rmi, позволяет удалять образы, если ни один из контейнеров на основе этих образов не активен.
  • Ctrl + F (Force Remove): позволяет принудительно удалять выбранный образ, как команда docker rmi —force.
  • I (History): отображает те же данные, что и Show Image History в разделе Containers.

4: Взаимодействие с сетями Networks

В разделе Images нажмите 3, чтобы открыть раздел Networks.

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

Вы можете удалить сеть из Docker с помощью Ctrl + E, хотя вы не можете удалить предопределенные по умолчанию сети Docker, такие как bridge. Для примера вы можете попытаться удалить bridge, выбрав его с помощью клавиш со стрелками и нажав Enter. Вы увидите длинный вывод:

. . .
"Containers": {
"34f8295b39b7c3364d9ceafd4e96194f210f22acc41d938761e1340de7010e05": {
"Name": "wordpress_wordpress_db_1",
"EndpointID": "68370df8a13b92f3dae2ee72ff769e5bdc00da348ef3e22fa5b8f7e9e979dbd5",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"e7105685e0e6397fd762949e869095aa4451a26cdacdad7f5e177bde52819c4a": {
"Name": "wordpress_wordpress_1",
"EndpointID": "44ea3a133d887c5352b8ccf70c94cda9f05891b2db8b99a95096a19d4a504e16",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
"e7d65c76b50ff03fc50fc374be1fa4bf462e9454f8d50c89973e1e5693eef559": {
"Name": "wordpress_phpmyadmin_1",
"EndpointID": "7fb1b55dd92034cca1dd65fb0c824e87a9ba7bbc0860cd3ed34744390d670b78",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}
},
. . .

Эта часть вывода показывает сетевые IP-адреса и MAC-адреса контейнеров и сети bridge. Из этого вы можете убедиться, что все контейнеры являются членами сети bridge и могут обмениваться данными, что является основным признаком того, что контейнерная сеть работает.

Чтобы закрыть вывод, нажмите ESC.

5: Мониторинг контейнеров Docker

Нажмите клавишу M, чтобы получить сжатый обзор запущенных контейнеров на текущем хосте/сервере. Этот экран можно вызвать из любого корневого раздела dry (Containers, Images или Networks).

Какие-то фрагменты этой информации перечислены в другом месте программы (например, в выводе параметров Stats + Top), но это представление выводит общую информацию обо всех контейнерах, что позволяет контролировать весь стек. Это полезно при управлении большим количеством контейнеров.

Нажмите Q, чтобы выйти из дашборда.

6: Установка dry в кластер Docker Swarm (опционально)

С локального компьютера запустите docker-machine, чтобы подключиться по SSH к ноде-менеджеру кластера. В мануале по Docker Swarm, отмеченном в требованиях, менеджером является нода node-1.

docker-machine ssh node-1

Чтобы продемонстрировать другой метод установки dry, используйте curl, чтобы загрузить официальный сценарий установки, и запустите его. Если вы предпочитаете избегать шаблона curl … | sh, вы можете установить dry, как показано в разделе 1.

curl -sSf https://moncho.github.io/dry/dryup.sh | sh

Сценарий автоматически переместит файл dry в /usr/local/bin:

dryup: Moving dry binary to its destination
dryup: dry binary was copied to /usr/local/bin, now you should 'sudo chmod 755 /usr/local/bin/dry'

Обновите права доступа к бинарному файлу, как в разделе 1:

sudo chmod 755 /usr/local/bin/dry

Попробуйте запустить dry.

dry

В правой верхней части  раздела Containers строки Swarm and Node role, которые ранее были пустыми, теперь заполнены:

Swarm:      active
Node role:  manager
Nodes:      3

Вы также увидите два контейнера с длинными именами образов. Остальные три контейнера распределены между другими рабочими нодами Swarm и определены сервисом webserver (по мануалу из требований).

7: Взаимодействие с нодами Docker Swarm (опционально)

В разделе Containers нажмите 4, чтобы перейти к разделу Nodes.

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

Используя клавиши со стрелками, выберите node-2, а затем нажмите Enter. Это откроет задачи отдельной ноды:

Что касается сервиса webserver, node-2 содержит первый и второй из пяти сетевых контейнеров. Задачи в этом представлении показывают, что CURRENT STATE двух контейнеров активно и показывает, сколько времени они работают. Нумерация ваших имен контейнеров здесь может различаться. Это зависит от того, какой рабочей ноде присвоены контейнеры.

Вернитесь в раздел Nodes, нажав Esc.

Общей задачей при использовании Docker Swarm является изменение состояния или доступности определенных нод. Выделите node-1 еще раз и нажмите Ctrl + A, чтобы увидеть поле Set Availability:

Changing node availability, please type one of ('active'|'pause'|'drain')

Выберите drain и нажмите Enter, чтобы подтвердить.

Эта опция запрещает ноде получать новые указания от менеджера Swarm и обычно используется для запланированных технических работ на ноде. Также при использовании этой опции менеджер запускает реплику на отдельной активной  ноде, которая компенсирует временный простой отключенной ноды.

Когда вы отправляете команду drain, сообщение в левом верхнем углу подтвердит действие.

Это изменение также отражается в столбце AVAILABILITY:

Node iujfrchorop9mzsjswrclzcmb availability is now drain

Чтобы вернуть node-2 в прежнее состояние, выделите ее еще раз и нажмите Ctrl + A, чтобы вернуть поле Set Availability. На этот раз введите active и нажмите Enter.

Вам будет предложено подтвердить действие:

Docker daemon: update wrclzcmb availability is now active

Опция, которую мы не использовали, pause, временно останавливает все процессы в каждом контейнере на выбранной ноде, до тех пор, пока нода не получит снова состояние active.

8: Взаимодействие с сервисами Docker Swarm (опционально)

Нажмите 5, чтобы открыть в dry раздел Services.

В мануале Создание кластера контейнеров Docker с помощью Docker Swarm в Ubuntu 16.04 настроен только один сервис, webserver, который реплицирует экземпляры (т. е. создает новые контейнеры), когда это необходимо. Максимальное число контейнеров 5. Это представление подтверждает, что 5 из 5 реплик активны. Также здесь можно увидеть порты, которые использует сервис, а также распределенные задачи.

dry может предоставить гораздо больше информации о сервисе. Нажмите Enter, выделив webserver.

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

Обратите внимание: здесь перечислены семь задач, несмотря на то, что сервис ограничен пятью. Это связано с тем, что ранее Docker Swarm создал две дополнительные задачи реплики во время теста в разделе 7, когда вы переключили node-2 в режим drain.

dry может увеличить максимальное количество реплик. Нажмите Esc, чтобы вернуться в раздел Services, затем введите Ctrl + S, выделив сервис webserver. Это вызовет подсказку:

Scale service. Number of replicas?

В контексте масштабирование этого сервиса было бы полезно для обеспечения дополнительных ресурсов для обработки растущего веб-трафика. Давайте увеличим количество реплик до 8; введите 8 и нажмите ENTER.

Подтвердите действие:

Docker daemon: update v6gbc1ms0pi scaled to 8 replicas

Теперь в Services вы увидите 8/8.

Чтобы удалить сервис полностью, выделите его и нажмите Ctrl+R.

About to remove the selected service. Do you want to proceed? y/N

Так вы можете удалять ненужные сервисы.

Чтобы закрыть дашборд и выйти из программы, нажмите Q.

Заключение

Теперь попробуйте применить dry к своей установке Docker и самостоятельно изучить, как dry может оптимизировать ваш рабочий процесс. В GitHub README вы можете найти дополнительные сочетания клавиш для dry.

Tags: , , , ,