Portainer: веб-интерфейс для Docker — установка

Docker и контейнеры
Portainer: веб-интерфейс для Docker — установка

Portainer — самый популярный веб-интерфейс для Docker, который превращает управление контейнерами из набора консольных команд в наглядную панель в браузере. Установка Portainer занимает меньше десяти минут: сам он работает как обычный контейнер и не требует ничего, кроме запущенного Docker. В этой статье пошагово развернём Portainer CE на VPS, защитим его паролем и HTTPS, разберём основные разделы интерфейса и подключим удалённые серверы через агент. Инструкция подходит для любого дистрибутива Linux с Docker.

Что такое Portainer и зачем он нужен

Portainer CE (Community Edition) — бесплатный open-source инструмент с веб-интерфейсом для управления Docker, Docker Swarm и Kubernetes. Через браузер вы можете запускать и останавливать контейнеры, смотреть логи и потребление ресурсов, редактировать стеки Compose, управлять образами, томами и сетями.

Кому он особенно полезен:

  • Новичкам — видно всю картину: какие контейнеры запущены, сколько ресурсов едят, какие порты проброшены.
  • Администраторам нескольких серверов — один Portainer управляет десятком хостов через агенты.
  • Командам — встроенное разграничение прав: разработчику можно дать доступ только к его стеку.

При этом Portainer не заменяет понимание Docker: базовые концепции — образы, тома, сети — знать всё равно нужно. Если вы только начинаете, сперва прочитайте статью про установку Docker на VPS.

Требования к серверу

Portainer сам по себе лёгкий: ему достаточно ~100 МБ RAM и минимальной доли CPU. Ресурсы нужны в первую очередь контейнерам, которыми вы будете управлять. Для рабочего окружения с несколькими стеками комфортный минимум — 2–4 ГБ RAM и SSD/NVMe-диск, чтобы образы собирались и разворачивались быстро.

Перед началом убедитесь, что Docker установлен и работает:

docker --version
docker info | grep "Server Version"

Если команда возвращает версию — можно продолжать.

Установка Portainer CE

Шаг 1. Создаём том для данных

Portainer хранит настройки, пользователей и данные стеков в собственной базе. Чтобы они переживали пересоздание контейнера, создаём именованный том:

docker volume create portainer_data

Подробнее о том, как Docker хранит данные, — в статье про тома и данные Docker.

Шаг 2. Запускаем контейнер

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

Что здесь важно:

  • -p 9443:9443 — веб-интерфейс по HTTPS с самоподписанным сертификатом. Порт 8000 (для Edge-агентов) пробрасывать не обязательно, если вы их не используете.
  • -v /var/run/docker.sock:/var/run/docker.sock — доступ к Docker API хоста. Именно через сокет Portainer управляет контейнерами, поэтому доступ к самому Portainer нужно защищать так же строго, как root-доступ к серверу.
  • --restart=always — панель поднимется сама после перезагрузки сервера.

Шаг 3. Первый вход

Откройте в браузере https://IP_сервера:9443. Браузер предупредит о самоподписанном сертификате — на этапе настройки это нормально. Portainer попросит создать администратора: логин и пароль минимум 12 символов.

Важно: если не создать администратора в течение нескольких минут после запуска, Portainer из соображений безопасности заблокирует установку. Лечится перезапуском:

docker restart portainer

После входа выберите окружение local — это Docker на текущем сервере.

Вариант установки через Docker Compose

Если вы держите всю инфраструктуру в Compose-файлах (а в продакшене так и стоит делать), Portainer описывается таким сервисом:

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:

Запуск:

docker compose up -d

Как устроен синтаксис Compose и чем он удобнее длинных docker run, мы разбирали в статье Docker Compose на практике.

Обзор интерфейса: что где находится

РазделЧто делает
DashboardСводка: количество контейнеров, образов, томов, сетей
ContainersСписок контейнеров: запуск, стоп, логи, консоль, статистика
ImagesУправление образами: pull, удаление, сборка из Dockerfile
StacksРазвёртывание приложений из docker-compose.yml прямо в браузере
VolumesТома: создание, просмотр, очистка неиспользуемых
NetworksСети Docker: bridge, кастомные сети, подключение контейнеров
Users / TeamsПользователи, команды и права доступа

Самые полезные фишки в повседневной работе:

  • Логи в реальном времени — кнопка Logs у контейнера, с фильтром и автообновлением.
  • Консоль в браузере — Console открывает shell внутри контейнера без SSH и docker exec.
  • Stats — графики CPU, памяти и сети по каждому контейнеру.
  • Recreate — пересоздать контейнер с новой версией образа в два клика.

Разворачиваем первый стек

Раздел Stacks → Add stack позволяет вставить содержимое docker-compose.yml в веб-редактор и развернуть его кнопкой. Для примера — стек с Nginx:

services:
  web:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "8080:80"

Нажмите Deploy the stack — через несколько секунд контейнер появится в списке, а сайт откроется по http://IP_сервера:8080. Стек можно редактировать в том же окне и переразворачивать: Portainer сам пересоздаст изменившиеся сервисы.

Безопасность: закрываем панель от посторонних

Portainer имеет полный доступ к Docker, а значит — к серверу. Минимальный набор мер:

  1. Сильный пароль администратора и отдельные учётки для каждого человека, никакого общего логина.
  2. Ограничение доступа файрволом. Если панелью пользуетесь только вы, разрешите порт 9443 лишь со своего IP:
ufw allow from ВАШ_IP to any port 9443 proto tcp
ufw deny 9443/tcp
  1. Нормальный HTTPS вместо самоподписанного сертификата. Удобнее всего спрятать Portainer за обратный прокси с автоматическим Let's Encrypt — как это сделать, читайте в статье про Traefik для Docker.
  2. Обновления. Portainer обновляется как обычный контейнер:
docker pull portainer/portainer-ce:latest
docker stop portainer && docker rm portainer
# затем повторите команду docker run из шага 2 — данные сохранятся в томе portainer_data

Управление несколькими серверами через Portainer Agent

Один Portainer может управлять целым парком хостов. На каждом удалённом сервере запускается лёгкий агент:

docker run -d \
  --name portainer_agent \
  --restart=always \
  -p 9001:9001 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes \
  portainer/agent:latest

Затем в основном Portainer: Environments → Add environment → Docker Standalone → Agent, указываете IP_удалённого_сервера:9001 — и новый хост появляется в списке окружений. Порт 9001 обязательно закройте файрволом от всех, кроме IP сервера с Portainer: агент не имеет собственной аутентификации.

Частые вопросы

Portainer бесплатный?

Да, Portainer CE (Community Edition) полностью бесплатен и покрывает все задачи администрирования Docker на своих серверах: контейнеры, стеки, образы, тома, пользователи. Есть платная Business Edition с расширенным RBAC и поддержкой, но для личных проектов и небольших команд CE хватает с запасом.

Сколько ресурсов потребляет Portainer?

Сам контейнер Portainer занимает порядка 50–150 МБ оперативной памяти и почти не нагружает процессор. Основную нагрузку создают контейнеры, которыми вы управляете, поэтому сервер подбирайте под них, а не под панель.

Можно ли управлять Docker Compose через Portainer?

Да, для этого есть раздел Stacks: вы вставляете содержимое docker-compose.yml в веб-редактор или подтягиваете его из git-репозитория, и Portainer разворачивает стек. Редактирование и обновление стека тоже делаются из браузера. Единственный нюанс — стеки, созданные из консоли, Portainer покажет с пометкой limited и редактировать их не даст.

Чем Portainer отличается от команды docker в консоли?

Функционально Portainer использует тот же Docker API, поэтому всё, что он делает, можно сделать и командами. Разница в удобстве: логи, статистика, список портов и томов видны сразу, а типовые операции выполняются в пару кликов. Консоль остаётся незаменимой для скриптов и автоматизации — эти инструменты дополняют друг друга.

Забыл пароль администратора — что делать?

Остановите контейнер Portainer и воспользуйтесь официальной утилитой сброса пароля, которая работает напрямую с томом данных: docker run --rm -v portainer_data:/data portainer/helper-reset-password. Утилита выведет новый временный пароль администратора в консоль, после чего запустите Portainer обратно и смените пароль в профиле.


Portainer раскрывается на сервере, где хватает ресурсов и на панель, и на десяток рабочих стеков. Тариф Pro от Cheap-Host — 12 vCPU, 16 ГБ RAM и 128 ГБ NVMe за 750₽/мес на KVM-виртуализации в Москве — как раз такой случай: сервер выдаётся за 45–60 секунд. Заказать VPS на Cheap-Host →