Управление контейнерами с помощью 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.

Пример организации сервисов

Сейчас всё разворачивается на одном сервер без дополнительных нод.

Text
[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 и т.д.

Можно посмотреть полный список контейнеров и их статус.

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

container.webp

Сторонние репозитории

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

Автообновление образов

Этого еще не настраивал, но для автоматического обновления образов можно использовать функцию автообновления через Watchtower. То есть, Watchtower будет автоматически обновлять образы, если они были обновлены в реестре (публичном или приватном).

Контролировать автообновления можно через метки в Docker Compose:

Dockerfile
version: '3.8'
services:
  watchtower:
    image: someimage
    restart: always
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

Заключение

В общем, довольно удобный инструмент для домашнего использования, особенно, если не совсем комфортно управлять всем этим из консоли. Но, конечно, это не замена K8s, K3s и т.п.

Docker Portainer Homelab