Обзор топ-5 полезных утилит для Docker

f559726d705f12fa7e4908f69c121574.jpg

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

В статье мы рассмотрим топ-5 полезных утилит, которые упростят работу с Docker.

1. Portainer

Официальный сайт: portainer.io

Документация: docs.portainer.io

Лицензия: коммерческая и свободная (open source)

С момента запуска в Docker официально никогда не было графического веб-интерфейса. Для решения этой проблемы появился инструмент под названием Portainer — проект с открытым исходным кодом, представляющий собой образ графического web-интерфейса для управления Docker. Помимо предоставления полной информации об установленном Docker, Portainer позволяет управлять всеми сущностями Docker, включая управление контейнерами, образами и сетями.

Произвести установку можно в отдельно установленный хост (standalone) Docker, а также в кластеры Docker Swarm и Kubernetes. Рассмотрим пример установки в варианте standalone в операционной системе Ubuntu 22.04. Первым шагом необходимо создать том (volume), где Portainer будет хранить свои данные:

docker volume create portainer_data

25adbd2f577638351638fc89180a74ae.png

Далее необходимо запустить Portainer:

docker run -d -p 8000:8000 -p 9443:9443 \
--name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest

46a518dd3b779022c29349ca51ed4e3d.png

Порт для входа в веб-интерфейс по умолчанию — 9443.

При первом входе необходимо создать пользователя и задать ему пароль:

1c875c4a89b4120cda7761699949162a.png

Далее необходимо подключиться к локальному окружению, где установлен Docker, или подключиться к удаленному хосту с установленным там Docker:

443bed496c47ae29b86655755633a5db.png

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

3d337f5c8fdae24d53cef598c61f5e24.png

В каждый из этих разделов можно перейти и выполнить определенные действия. В разделе Контейнеры можно запустить/остановить/завершить/перезапустить/поставить на паузу/удалить контейнер:

01a28f00b7c669fee4bd8c4a08f177c2.png

Также в этом разделе можно создать контейнер:

4c8084a706d061f6081b96a6f80988f2.png

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

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

0cdcb7eac01fc8b85efd8d1984560df8.png

В разделе Сети можно создавать и удалять сети:

36db2e582034e30cc64919c95d04f5dc.png

В разделе Тома можно создавать и удалять тома:

70dcef9664f6c99a3fd8f1c9217609a9.png

Также в Portainer можно просматривать события:

4713458e50b96b74461f0b6f3faced69.png

2. Hadolint

Официальный сайт: GitHub

Документация: GitHub

Лицензия: свободная (open source)

Hadolint представляет собой утилиту (линтер), предназначенную для оценки Dockerfile с точки зрения корректности синтаксиса и безопасности инструкций. Также Hadolint проводит проверку на соблюдение лучших практик по написанию инструкций в Dockerfile.

В качестве примера возьмем Dockerfile со следующим содержанием:

FROM debian
RUN export node_version="0.10" \
&& apt-get update && apt-get -y install nodejs="$node_verion"
COPY package.json usr/src/app
RUN cd /usr/src/app \
&& npm install node-static
EXPOSE 80000
CMD ["npm", "start"]

Hadolint можно запустить прямо в контейнере Docker для этого достаточно выполнить команду ниже, передав имя Dockerfile в качестве параметра:

docker run --rm -i hadolint/hadolint < Dockerfile

f724202d686e5e5642b56ed119ad2f64.png

После того, как анализ будет завершен, в терминале будут выведены все недочеты, которые были найдены в Dockerfile. Можно заметить, что утилита указала на то, что в нашем Dockerfile используется тег latest, в то время как необходимо указывать конкретную версию в базовом образе. Также утилита сообщила нам, что для использования портов необходимо использовать диапазон с 0 до 65535, а в нашем Dockerfile указан порт 80000. В качестве уровней предупреждения используются следующие:

info — рекомендации не являются обязательными к исправлению, но помогут оптимизировать образ;

warning — необходимо обратить внимание на недочеты, как правило, предоставляются советы из официальной документации по оптимизации Dockerfile;

error — найдены критические ошибки, которые влияют на сборку образа и могут привести к проблем после запуска контейнера.

Для идентификации ошибок Hadolint использует правила. Каждое правило имеет свой уникальный буквенно-цифровой код. Найти все правила и их описания, содержащие шаги по устранению ошибок, можно по ссылке.

Если вы не хотите запускать Hadolint в контейнере, его можно установить на хост или использовать онлайн.

3. Dive

Официальный сайт: GitHub

Документация: GitHub

Лицензия: свободная (open source)

Dive — утилита, которая визуально отображает подробную информацию о Docker образах и их слоях. 

Dive можно запустить в контейнере, где последним аргументом указывается название образа или контейнера, который необходимо проанализировать:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wagoodman/dive:latest portainer/portainer-ce

be2e3928a99f7e6b4b94570729554b38.png

На панели справа отображаются слои образа, а слева — подробная информация о каждом слое. Dive позволяет проанализировать размер образа и выявить те слои, которые занимают больше всех места на диске. 

Также можно просматривать файлы, которые были изменены, добавлены или удалены. Данные изменения указаны в древовидной структуре файлов справа. Эта функция помогает наглядно отобразить изменения, которые вносились на каждом этапе сборки. Это может оказаться полезным, если нет доступа к файлу Dockerfile, из которого происходит сборка образа.

4. Ctop

Официальный сайт: GitHub

Документация: GitHub

Лицензия: свободная (open source)

Ctop — утилита для мониторинга метрик в контейнерах, которая напоминает утилиту top в Unix системах. Для запуска утилиты достаточно выполнить команду:

docker run --rm -ti \
  --name=ctop \
  --volume /var/run/docker.sock:/var/run/docker.sock:ro \
  quay.io/vektorlab/ctop:latest

25b91c4a254439194271c24763fa11d7.png

У ctop отсутствуют какие-либо ключи и параметры. После запуска утилита отобразит список всех контейнеров — как запущенных, так и завершенных.

Утилита отображает следующую информацию о контейнерах Docker:

  • Имя;

  • ID (номер);

  • Нагрузку на процессор;

  • Нагрузку на оперативную память;

  • NET RX/TX — количество переданных/полученных данных;

  • IO R/W — количество операций ввода-вывода в секунду;

  • PID — уникальный идентификатор процесса;

  • uptime.

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

0ff1ee2ae40380350632963aa8ce528d.png

Метрики динамические и получают информацию в режиме реального времени.

5. Dozzle

Официальный сайт: GitHub

Документация: GitHub

Лицензия: свободная (open source)

Dozzle представляет собой веб-интерфейс для отображения логов контейнеров в режиме реального времени. Для запуска Dozzle достаточно одной команды:

docker run --detach --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle

Для доступа в веб-интерфейс необходимо перейти в браузере по IP-адресу сервера и порту 8080:

f73b5463ca6841c9c23d6d4f573bc92b.png

На главной странице отображаются запущенные контейнеры. Для того чтобы просмотреть список всех контейнеров (остановленных и завершенных), необходимо перейти в раздел «Все». Сверху над списком контейнеров расположена информация об их общем количестве, отдельно отображено количество запущенных контейнеров, а также информация об использовании процессора и оперативной памяти.

Чтобы посмотреть лог файл какого-либо контейнера, необходимо выбрать его из списка. Далее откроется файл с логами:

e079a01eabbc32674029029884e9353a.png

Лог файл динамический, т. е. информация обновляется в режиме реального времени.

Также существует возможность скачать файл с логами, произвести его очистку и воспользоваться поиском:

acce299d33842b23d3bd426fa333fa15.png

Итог

Функциональность Docker можно существенно расширить при помощи сторонних утилит. Все описанные в статье утилиты являются бесплатными. У них открытый исходный код, что позволяет вносить в них свои правки, тем самым оптимизируя их под свои нужды. Также каждую утилиту можно запустить в контейнере Docker, не устанавливая ее на хост, что упрощает работу с ней.

НЛО прилетело и оставило здесь промокод для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

© Habrahabr.ru