Управление контейнерами с помощью Portainer для HomeLab
опубликовано: ⏰ 4В продолжении статьи CI/CD с Gitea для HomeLab, пример способа удалённого управления сервисами, развёрнутыми в виде Docker-контейнеров. Не всегда есть смысл разворачивать “тяжёлые” оркестраторы контейнеров, вроде K8S, K3S, Swarm и тому подобное. Об одной из альтернатив и пойдёт речь.
Введение
Тем, кто используют современные NAS, скорее всего уже доводилось использовать Portainer, который идёт из “коробки”. Как раз его и решил попробовать для управления контейнерами.
Portainer – это веб-интерфейс для управления Docker (и, при желании, Kubernetes). Его главные преимущества в домашней среде:
| Функция | Описание |
|---|---|
| 💻 Визуальный интерфейс | Не нужно держать в голове команды docker ps, logs, exec, docker-compose up и прочие. |
| 🛠️ Управление стеками | Довольно удобное управление конфигурациями Docker Compose с веб-интерфейса. Опять же без использования консоли. |
| 🌐 Кластер из нод | Если есть несколько серверов с контейнерами, то их можно объединить под одной панелью управления через агенты. |
| 🧩 Шаблоны | Есть шаблоны, некий аналог Helm, шаблонов OpenShift, которые позволяют быстро развернуть популярные сервисы. Можно делать свои. |
| 🆓 Community Edition | Полностью бесплатен для личного использования, но есть возможность получить лицензию для BE для 3-х нод. |
Функционала CE вполне достаточно для дома, но если хочется большего, то можно запросить лицензию на 3 ноды – Get 3 Nodes Free.
Пример организации сервисов
Сейчас всё разворачивается на одном сервер без дополнительных нод.
[Docker Host (HomeLab Server)]
├── Portainer Server (основной контейнер)
├── Служебные сервисы DevOps (Gitea, Nexus, SonarQube, Structurizr, ...)
├── Инфраструктурные сервисы (Traefik, Pi-hole, Poste.io, ...)
├── Безопасность (Vaultwarden, Keycloak, ...)
└── Приложения (tB.kbase, ...)Portainer Agent – не использую, хотя рекомендуют разворачивать их на каждой ноде, даже если она одна.
У меня для большинства сервисов настроены локальные DNS-записи (Pi-hole) и балансировка через Traefik для удобства. Но можно обойтись и без этого, но придётся следить за назначенными портами, чтобы не было конфликтов.
Установка и настройка
Как ранее писал, агенты не использую. Они полезны, когда есть несколько серверов, которыми необходимо управлять из одной точки.
Настройку можно сделать по официальной документации:
Я монтирую /var/run/docker.sock напрямую в Portainer Server, поэтому при запуске сервера достаточно добавить
окружение.

Стеки (Docker Compose)
Стек в Portainer это по сути просто docker-compose файл, который можно загрузить и запустить. Есть два типа:
- Вручную запущенные вне Portainer, с ограниченными возможностями управления.
- Созданные внутри Portainer, которые можно управлять полностью через UI.

На снимке экрана все сервисы кроме tekblueprint запущены вне Portainer, но при этом он их видит и может управлять ими.

В случае создания стека внутри Portainer, управление становится полным. Docker Compose и переменные окружения можно редактировать прямо из интерфейса и разворачивать оттуда же. Довольно удобно, если нужно быстро проверить что-то.
Единственное, что всё-таки требуется, это доступ к файловой системе хоста, если нужно будет смонтировать в контейнер файлы или папки.

Управление контейнерами
Управление запущенными контейнерами тоже довольно удобно сделано, похоже на Docker Desktop или Services в IntelliJ IDEA. В принципе, Portainer можно вполне использовать в качестве замены Docker Desktop, Rancher Desktop, Podman Desktop и т.д.
Можно посмотреть полный список контейнеров и их статус.

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

Сторонние репозитории
В Portainer можно добавлять сторонние репозитории, чтобы использовать их в качестве источника образов. Это как раз удобно для локальной разработки, если у вас есть собственные образы, которые собираются на CI/CD.

Автообновление образов
Этого еще не настраивал, но для автоматического обновления образов можно использовать функцию автообновления через Watchtower. То есть, Watchtower будет автоматически обновлять образы, если они были обновлены в реестре (публичном или приватном).
Контролировать автообновления можно через метки в Docker Compose:
version: '3.8'
services:
watchtower:
image: someimage
restart: always
labels:
- "com.centurylinklabs.watchtower.enable=true"Заключение
В общем, довольно удобный инструмент для домашнего использования, особенно, если не совсем комфортно управлять всем этим из консоли. Но, конечно, это не замена K8s, K3s и т.п.