Self-hosted Apps

Portainer

Веб-интерфейс для управления Docker: контейнеры, образы, тома и стеки видно и можно менять мышкой, без команд в терминале.

Что такое Portainer

Portainer — веб-панель управления Docker. Вместо docker ps, docker logs и docker exec в терминале вы открываете браузер и видите список контейнеров, их состояние, логи, потребление ресурсов — и управляете ими мышкой.

По духу это панель управления хостингом, только не для сайтов и почты, а для контейнеров. Умеет не только Docker: поддерживаются Docker Swarm, Kubernetes и Podman.

Есть две редакции: Community Edition — бесплатная и с открытым кодом, её ставят в большинстве случаев; Business Edition — коммерческая, добавляет RBAC с ролями и пользователями, интеграцию с корпоративными каталогами и поддержку.

Что умеет

  • Контейнеры — старт, стоп, пересоздание, логи в реальном времени, статистика по CPU и памяти, консоль внутрь контейнера прямо из браузера.
  • Образы — скачать, удалить, почистить неиспользуемое.
  • Тома и сети — посмотреть, что есть, кто чем пользуется, удалить осиротевшее.
  • Stacks — развернуть Docker Compose-стек, вставив YAML в веб-редактор или подтянув его из Git-репозитория с автообновлением. Это уже подход в духе GitOps.
  • App Templates — каталог готовых приложений в один клик.
  • Реестры — подключение приватных registry, включая Docker Hub и свои.
  • Environments — несколько хостов в одной панели через Portainer Agent.

Portainer Server и Agent

Portainer Server — сама панель. Чтобы управлять другими машинами, на них ставят Portainer Agent: он даёт доступ к Docker API удалённого хоста, и все узлы видны в одном интерфейсе. Для машин за NAT или в чужой сети есть Edge Agent — он сам инициирует соединение к серверу.

Порты: 9443 — HTTPS-интерфейс, 8000 — туннель Edge Agent, 9001 — агент.

Стандартная установка:

docker volume create portainer_data

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

Первым делом после запуска задают пароль администратора. Portainer намеренно блокирует создание админа, если панель провисела без настройки — тайм-аут снимается перезапуском контейнера. Это защита от того, что кто-то создаст админа раньше вас.

Главное про безопасность

Строка -v /var/run/docker.sock:/var/run/docker.sock в примере выше — не деталь, а суть. Доступ к Docker-сокету равносилен root-доступу к хосту: имея его, можно запустить контейнер с примонтированной корневой файловой системой и сделать с сервером что угодно. Никакая изоляция контейнера от этого не спасает.

Отсюда правила:

  • Не выставляйте Portainer в интернет без необходимости. Публичная панель управления Docker — это несанкционированный доступ ко всему серверу, а не «просто удобная админка».
  • Если доступ снаружи нужен — только по HTTPS с нормальным SSL-сертификатом, за Traefik или Nginx, желательно с ограничением по IP.
  • Лучший вариант для одиночного сервера — вообще не публиковать порт, а ходить через SSH-туннель: ssh -L 9443:localhost:9443 user@server.
  • Пароль администратора — длинный и уникальный.

Кому нужен, а кому нет

Portainer полезен, когда нужно быстро посмотреть логи упавшего контейнера с телефона, когда с сервером работают люди, для которых CLI — барьер, или когда хостов несколько и хочется видеть их в одном месте. Для домашней лаборатории и небольших команд это заметная экономия времени.

Ограничение тоже стоит знать: изменения, сделанные мышкой, нигде не зафиксированы. Пересоздали контейнер через UI с другими параметрами — и ваш docker-compose.yml больше не описывает реальность. Для продакшена это плохо, поэтому там Portainer используют как окно для наблюдения, а разворачивают через Compose-файлы в Git, Ansible или стеки Portainer, привязанные к репозиторию.

Ресурсов панель почти не потребляет — это лёгкий Go-бинарник, который спокойно живёт на самом простом VPS рядом с рабочими сервисами.

Альтернативы

Dockge — легче, ориентирован на Compose-стеки и не ломает файлы. Rancher — тяжелее и про Kubernetes целиком. Lazydocker — тот же обзор, но в терминале, без веб-сервера. Cockpit — панель для Linux-хоста в целом, с контейнерами как одним из разделов.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер