Найти в Дзене
Хитрости Жизни PRO

🚀 Portainer: простой способ управлять Docker и Kubernetes даже для новичков

Оглавление

🔹 Часть 1. Введение

Что такое контейнеризация?

Контейнеризация — это технология, которая позволяет запускать приложения в изолированных средах, называемых контейнерами.

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

📌 Простой пример:

  • У вас есть сайт на PHP.
  • Обычно для запуска нужно установить веб-сервер (Apache или Nginx), PHP, расширения, базу данных.
  • В контейнере всё это упаковано заранее. Вы просто запускаете контейнер — и сайт работает.

Таким образом:

  • Приложение работает одинаково везде — на ноутбуке, сервере, в облаке.
  • Легче обновлять — можно просто заменить контейнер на новый образ.
  • Безопаснее — контейнеры изолированы друг от друга.

__________________________________________________________________________________________

✅ Простота — запуск контейнера в одну команду:

docker run -d nginx

✅ Экономия ресурсов — контейнеры не требуют отдельной виртуальной машины, они используют ядро хоста.

✅ Удобство разработки — у разработчика на ноутбуке и на сервере в продакшене окружение одинаковое.

✅ Экосистема — Docker Hub содержит миллионы готовых образов.

Именно благодаря простоте и стандарту образов (OCI) Docker занял своё место как главный инструмент контейнеризации.

__________________________________________________________________________________________

Проблемы CLI и зачем нужен Portainer

Несмотря на удобство Docker, у него есть и минусы — большинство операций выполняются через CLI (командную строку).

  • Нужно помнить десятки команд:
docker ps
docker logs -f <container>
docker exec -it <container> bash
  • Ошибка в параметрах может стоить часов отладки.
  • Наглядно увидеть ресурсы или состояние контейнера сложно.

📌 Здесь появляется Portainer.

Это веб-интерфейс, который позволяет:

  • Запускать контейнеры через пару кликов.
  • Смотреть логи и метрики прямо в браузере.
  • Управлять Docker Compose и Kubernetes.
  • Делать всё то же самое, что в CLI, но гораздо удобнее.

Portainer стал «мостиком» между новичками и миром контейнеров. Он снижает порог входа и делает Docker/Kubernetes доступным даже для тех, кто боится терминала.

__________________________________________________________________________________________

🔹 Часть 2. История и развитие Portainer

-2

Первые версии

История Portainer началась в 2016 году. Его основатели — инженеры, которые работали с Docker и заметили, что даже опытным пользователям тяжело управлять контейнерами через командную строку.

Первая версия называлась Docker UI. Это был очень простой веб-интерфейс, который показывал список контейнеров и позволял запускать/останавливать их. Но проект быстро получил популярность среди разработчиков и системных администраторов.

Вскоре команда выделила его в отдельный продукт — Portainer.

__________________________________________________________________________________________

Portainer CE vs Business Edition

С ростом популярности проект разделился на две ветки:

  1. Portainer CE (Community Edition)
    Бесплатная версия.
    Поддерживает Docker, Docker Swarm, Kubernetes.
    Основные функции: управление контейнерами, сетями, томами, пользователями.
    Отличный выбор для домашних серверов, обучения и малого бизнеса.
  2. Portainer Business Edition (BE)
    Платная версия для компаний.
    Расширенные функции безопасности (RBAC, SSO, аудит).
    Поддержка enterprise-кластеров.
    SLA-поддержка от разработчиков.
    Удобна для больших организаций, где много пользователей и критична безопасность.

Таким образом, CE подходит всем, а BE нужен там, где серьёзные деньги и строгая политика безопасности.

__________________________________________________________________________________________

Текущая архитектура

Portainer построен по модульной архитектуре:

  1. Portainer Server
    Основное веб-приложение, которое запускается в контейнере.
    Отвечает за интерфейс, авторизацию, хранение данных.
  2. Portainer Agent
    Лёгкий компонент, устанавливаемый на хост или кластер.
    Обеспечивает связь между сервером Portainer и самим Docker/Kubernetes.
    Нужен для управления удалёнными нодами.
  3. База данных (встроенная)
    Все настройки хранятся внутри контейнера Portainer в томе portainer_data.
    Можно легко сделать бэкап.
  4. UI (веб-панель)
    Основа — это веб-интерфейс, доступный через браузер (обычно по HTTPS на порту 9443).
    Работает как SPA (single page application), что делает работу быстрой и удобной.

__________________________________________________________________________________________

Ключевые факты о развитии

  • 📌 2016 — первые версии (Docker UI).
  • 📌 2017 — переименование в Portainer, появление поддержки Docker Swarm.
  • 📌 2019 — добавлена поддержка Kubernetes.
  • 📌 2020 — выпуск Business Edition.
  • 📌 2022–2023 — поддержка Edge Agent для IoT и удалённых кластеров.
  • 📌 2024 — оптимизация для облачных сред, интеграция с CI/CD.

Сегодня Portainer — это один из самых популярных UI для управления контейнерами, который используют и дома, и в крупных компаниях.

__________________________________________________________________________________________

🔹 Часть 3. Установка Portainer

Portainer сам является контейнером, поэтому его установка занимает всего пару минут. Вы можете развернуть его в Docker, Docker Compose, Kubernetes, а также установить на разные ОС.

-3

⚙️ Установка в Docker

  1. Создаём том для хранения данных Portainer:
docker volume create portainer_data

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

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

3. После запуска интерфейс будет доступен по адресу:
👉 https://<IP-сервера>:9443
__________________________________________________________________________________________

-4

⚙️ Установка в Docker Compose

  1. Создаём файл docker-compose.yml:
version: '3.3'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "8000:8000"
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:

2. Запускаем командой:

docker compose up -d

Проверяем:

👉 docker ps

Вы должны увидеть контейнер portainer.

__________________________________________________________________________________________

-5

⚙️ Установка в Kubernetes

Portainer умеет работать с Kubernetes, и для этого есть официальный манифест.

  1. Скачиваем YAML:
kubectl apply -f https://downloads.portainer.io/ce2-19/portainer.yaml

2. По умолчанию создаётся сервис типа NodePort. Чтобы открыть доступ, используйте:

kubectl get svc -n portainer

3. .Затем переходите по адресу https://<NodeIP>:30779 (порт может отличаться).

__________________________________________________________________________________________

-6

⚙️ Установка на Linux

На Linux установка обычно сводится к установке Docker и запуску контейнера Portainer.

Пример для Ubuntu 22.04:
sudo apt update && sudo apt upgrade -y

sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker --now

После этого повторите шаги установки через Docker или Compose.

__________________________________________________________________________________________

-7

⚙️ Установка на Windows

  1. Установите Docker Desktop.
  2. Включите поддержку WSL2.
  3. Выполните команду в PowerShell:
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

4. Интерфейс будет доступен на https://localhost:9443.

__________________________________________________________________________________________

-8

⚙️ Установка на macOS

  1. Установите Docker Desktop for Mac.
  2. Запустите контейнер 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

3. Доступ по адресу: https://localhost:9443.

__________________________________________________________________________________________

⚙️ Первоначальная настройка

  1. После первого входа в интерфейс вы увидите страницу Create Admin User.
    Придумайте логин и пароль.
    Сохраните их в менеджере паролей.
  2. Дальше система спросит:
    Подключиться к
    локальному Docker
    Подключить удалённый агент
    Подключить Kubernetes
  3. Обычно для домашнего сервера выбирают Local → Docker Environment.
  4. После этого вы попадаете в Dashboard и можете управлять контейнерами.

__________________________________________________________________________________________

✅ На этом установка завершена.

Теперь переходим к самому интересному — как выглядит интерфейс и что в нём есть.

__________________________________________________________________________________________

-9

🔹 Часть 4. Интерфейс Portainer

После установки и первичной настройки Portainer вы попадёте в его веб-панель. Интерфейс интуитивно понятный и разделён на несколько ключевых областей. Именно через него выполняются все действия: запуск контейнеров, настройка сетей, управление пользователями и так далее.

__________________________________________________________________________________________

🖥️ Панель Dashboard

Dashboard — это главная страница после входа в систему. Она даёт обзор всей инфраструктуры:

  • Количество запущенных контейнеров.
  • Количество образов, томов и сетей.
  • Статус Docker или Kubernetes среды.
  • Быстрые ссылки на основные действия (создать контейнер, подключить стек, добавить пользователя).

👉 Для новичка это как «главная панель управления сервером» — видно сразу, что работает, а что нет.

__________________________________________________________________________________________

📦 Containers

Это раздел, где находятся все контейнеры, запущенные на сервере. Здесь доступны:

  • ✅ Запуск нового контейнера (через форму с настройками: образ, порты, тома, переменные окружения).
  • ✅ Список контейнеров с их состоянием (Running, Stopped, Restarting).
  • ✅ Управление: старт, стоп, рестарт, удаление.
  • ✅ Просмотр логов (реального времени).
  • ✅ Доступ к консоли контейнера прямо из браузера (терминал внутри контейнера).
  • ✅ Настройка перезапуска (Restart Policy).

Это основное место работы, если вы управляете Docker.

__________________________________________________________________________________________

📂 Images

Раздел Images отвечает за управление образами:

  • Загрузка образов с Docker Hub, GitLab Registry, GitHub Packages или локального репозитория.
  • Просмотр установленных образов.
  • Удаление ненужных, чтобы освободить место.
  • Возможность задать приватный репозиторий и логиниться в него прямо из Portainer.

👉 Это удобно для разработчиков, которые собирают свои образы и хотят их запускать без командной строки.

__________________________________________________________________________________________

🌐 Networks

Docker создаёт виртуальные сети для контейнеров. В Portainer можно:

  • Создавать новые сети (Bridge, Overlay, Host).
  • Подключать контейнеры к разным сетям.
  • Просматривать топологию соединений.

📌 Пример:

Вы хотите, чтобы база данных
MySQL была доступна только из контейнера WordPress, но не из интернета. Для этого создаёте приватную сеть и подключаете туда только два контейнера.

__________________________________________________________________________________________

💾 Volumes

Тома (Volumes) позволяют сохранять данные контейнеров даже после их перезапуска.

В интерфейсе Portainer можно:

  • Создавать новые тома.
  • Привязывать их к контейнерам.
  • Удалять ненужные.

📌 Пример:

Вы подняли контейнер с
Nextcloud. Все файлы пользователей должны храниться на диске сервера. Для этого подключаете том /mnt/storage:/var/www/html/data. Даже если контейнер будет пересоздан — файлы останутся.

__________________________________________________________________________________________

👥 Users & Teams

Portainer поддерживает многопользовательский режим. Вы можете:

  • Создавать пользователей.
  • Давать им разные роли (admin, user).
  • Создавать команды (Teams).
  • Ограничивать доступ к определённым средам или проектам.

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

__________________________________________________________________________________________

🧩 App Templates

Очень полезная функция для новичков. Portainer поддерживает App Templates — готовые пресеты для развёртывания популярных приложений.

Например:

  • WordPress
  • MySQL
  • Nginx
  • Nextcloud
  • Redis

Вы просто выбираете шаблон → задаёте пару параметров (пароль, порт, том) → нажимаете кнопку Deploy → и приложение работает.

__________________________________________________________________________________________

🔎 Итог по интерфейсу

Интерфейс Portainer — это «графическая надстройка» над Docker и Kubernetes. Всё, что раньше требовало команд и редактирования YAML-файлов, теперь доступно через понятные кнопки и формы.

__________________________________________________________________________________________

🔹 Часть 5. Работа с контейнерами

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

__________________________________________________________________________________________

▶️ Запуск контейнера

В интерфейсе Portainer можно создать новый контейнер в пару кликов:

  1. Заходим в раздел Containers.
  2. Нажимаем + Add Container.
  3. Заполняем параметры:
    Name — имя контейнера (например, nginx-server).
    Image — образ (например, nginx:latest).
    Ports — проброс портов (80 → 8080, 443 → 8443).
    Volumes — подключение томов (/mnt/data:/usr/share/nginx/html).
    Environment Variables — переменные окружения (например, MYSQL_ROOT_PASSWORD=1234).

После этого нажимаем Deploy the container, и приложение запускается.

📌 Пример: Запуск Nginx

  • Name: nginx-server
  • Image: nginx:latest
  • Ports: 80:80

    → Через пару секунд сайт будет доступен по IP сервера.

__________________________________________________________________________________________

📜 Логи и мониторинг

Чтобы проверить, что контейнер работает правильно, в Portainer есть просмотр логов:

  • В списке контейнеров нажмите на контейнер → вкладка Logs.
  • Вы увидите вывод приложения в реальном времени.
  • Можно включить «Follow logs» (потоковое отображение).

Также доступна статистика:

  • Использование CPU.
  • Использование RAM.
  • Сетевая активность.
  • IO (чтение/запись на диск).

📌 Пример:

У вас есть контейнер с
MySQL, и он неожиданно падает. Открыв логи, вы сразу увидите ошибку: например, «Out of memory» или «Access denied».

__________________________________________________________________________________________

🔄 Перезапуск и обновление

Иногда приложение нужно перезапустить или обновить:

  • Restart — мягкий перезапуск.
  • Stop / Start — полная остановка и запуск.
  • Recreate — пересоздание контейнера (например, если поменялись настройки).

Обновление контейнера обычно делается так:

  1. Удаляем старый контейнер.
  2. Скачиваем новый образ (image:latest).
  3. Запускаем с теми же параметрами.

⚡ Но в Portainer это можно сделать одной кнопкой «Recreate with pull latest image».

__________________________________________________________________________________________

♻️ Автоматический рестарт

У Docker есть политики перезапуска:

  • No — никогда не перезапускать.
  • Always — всегда запускать контейнер после сбоя или перезагрузки сервера.
  • On-failure — перезапускать только если контейнер упал с ошибкой.
  • Unless-stopped — всегда запускать, пока пользователь сам не остановит.

В Portainer это настраивается в один клик в разделе Restart Policy.

📌 Пример:

У вас на домашнем сервере работает контейнер с
AdGuard Home. Если вдруг сервер перезагрузится, лучше, чтобы контейнер автоматически поднялся. Для этого достаточно выставить политику Always.
__________________________________________________________________________________________

🔧 Дополнительные возможности

Кроме базового управления, Portainer позволяет:

  • Зайти внутрь контейнера через консоль в браузере (аналог docker exec -it <container> bash).
  • Скопировать файлы из контейнера и в контейнер.
  • Изменить параметры «на лету» (например, переменные окружения или тома).
  • Управлять сетью контейнера (подключать/отключать).

__________________________________________________________________________________________

📌 Итог

Portainer превращает управление контейнерами в процесс «нажал кнопку — получил результат».

Для новичка это шанс не бояться Docker, а для опытного администратора — экономия времени и наглядность.

__________________________________________________________________________________________

🔹 Часть 6. Работа с Docker Compose

Если контейнеры — это отдельные кирпичики, то Docker Compose — это способ строить целые здания из них.

Compose позволяет описывать сразу несколько контейнеров в одном файле docker-compose.yml и запускать их как единое приложение.

📌 Пример:

WordPress не может работать без MySQL. Если запускать их вручную, нужно помнить все команды. А с Compose всё в одном файле: и база, и сам сайт.

Portainer умеет работать с Compose, и это делает управление ещё проще.

__________________________________________________________________________________________

📥 Импорт docker-compose.yml

  1. Заходим в Portainer → раздел Stacks.
  2. Нажимаем + Add stack.
  3. Указываем имя стека (например, wordpress).
  4. Вставляем содержимое файла docker-compose.yml или указываем ссылку на GitHub/URL.
  5. Нажимаем Deploy the stack.

После этого Portainer создаст все контейнеры, сети и тома автоматически.

__________________________________________________________________________________________

📦 Управление сервисами

Когда стек развернут, в интерфейсе видно:

  • список контейнеров;
  • их статус;
  • можно перезапустить всё приложение одной кнопкой;
  • можно удалить или пересоздать стек.

⚡ Это удобно, если нужно обновить приложение: достаточно пересоздать стек с новой версией образа.

__________________________________________________________________________________________

📈 Масштабирование (scale)

Compose поддерживает масштабирование сервисов. Например, у вас есть приложение api, и вы хотите запустить его в 3 экземплярах для распределения нагрузки.

В Portainer:

  1. Заходим в стек.
  2. Выбираем сервис.
  3. В разделе Scale service указываем количество реплик.

📌 Пример:

yaml


services:
api:
image: myapi:latest
deploy:
replicas: 3

Теперь у вас сразу 3 контейнера, и нагрузка делится между ними.

__________________________________________________________________________________________

🔧 Примеры готовых Compose-файлов

📝 WordPress + MySQL

yaml

version: '3.3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
restart: always
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- db_data:/var/lib/mysql
restart: always
volumes:
wordpress_data:
db_data:

После деплоя сайт будет доступен на http://IP:8080.

__________________________________________________________________________________________

📝 Nextcloud + MariaDB

yaml

version: '3'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: ncpass
volumes:
- db:/var/lib/mysql
app:
image: nextcloud
ports:
- 8081:80
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
volumes:
db:
nextcloud:

Теперь Nextcloud доступен на http://IP:8081.

__________________________________________________________________________________________

📝 Jellyfin (медиа-сервер)

yaml

version: "3"
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
user: 1000:1000
ports:
- 8096:8096
volumes:
- /mnt/media:/media
- jellyfin_config:/config
restart: unless-stopped
volumes:
jellyfin_config:

Открываем http://IP:8096 и получаем полноценный медиа-сервер.

__________________________________________________________________________________________

📌 Итог

Portainer + Docker Compose = мощная комбинация.

  • Новичку не нужно писать команды в терминале.
  • Админ может запускать сложные приложения одной кнопкой.
  • Обновления и масштабирование выполняются за минуты.

__________________________________________________________________________________________

🔹 Часть 7. Kubernetes + Portainer

Kubernetes (или K8s) — это «оркестратор контейнеров», стандарт управления приложениями в кластере. Но у него есть проблема: сложность. YAML-файлы, kubectl, постоянные конфигурации — всё это отпугивает новичков.

Portainer делает Kubernetes гораздо понятнее. Вы получаете тот же веб-интерфейс, что и для Docker, но с поддержкой всех сущностей Kubernetes.

__________________________________________________________________________________________

🔗 Подключение к кластеру

Portainer можно запустить прямо внутри Kubernetes или подключить как внешний UI.

Вариант 1. Установка в кластер

kubectl apply -f https://downloads.portainer.io/ce2-19/portainer.yaml
  • Создаётся namespace portainer.
  • Поднимается Deployment с Pod-ами Portainer.
  • Автоматически создаётся сервис NodePort для доступа к веб-панели.

Проверяем сервис:

kubectl get svc -n portainer

Обычно доступ по адресу:

👉 https://<NodeIP>:30779

__________________________________________________________________________________________

Вариант 2. Подключение к удалённому кластеру

Если Portainer запущен в Docker или на другом сервере, можно подключить кластер через Portainer Agent for Kubernetes.

  • Устанавливаем агент:
kubectl apply -f https://downloads.portainer.io/agent-stack.yml
  • В интерфейсе Portainer → Environments+ Add environment.
  • Выбираем Kubernetes и указываем данные для подключения.

Теперь можно управлять всем кластером через браузер.

__________________________________________________________________________________________

🗂 Namespaces, Pods, Services

Portainer визуализирует базовые объекты Kubernetes:

  • Namespaces — логические пространства имён (например, default, dev, prod).
  • Pods — контейнеры (или группы контейнеров), которые реально запускаются в кластере.
  • Services — доступ к Pod-ам (ClusterIP, NodePort, LoadBalancer).
  • Deployments — описание, как именно должны запускаться Pod-ы (какой образ, сколько реплик).

📌 Пример в Portainer:

Вы видите Deployment nginx-deploy → 3 Pod-а → Service типа NodePort → доступ по :30080. Всё это управляется в пару кликов.🗂 Namespaces, Pods, Services

__________________________________________________________________________________________

📦 Helm Charts через Portainer

Helm — это «менеджер пакетов» для Kubernetes.

Обычно для установки, например, WordPress, нужно писать десятки YAML-файлов.

С Helm это делается одной командой.

Portainer поддерживает установку Helm Charts прямо из интерфейса:

  • Выбираете готовый чарт (например, из Bitnami).
  • Указываете параметры (пароль, порты, количество реплик).
  • Нажимаете «Deploy».

Через пару минут у вас готов WordPress или PostgreSQL-кластер.

__________________________________________________________________________________________

⚠️ Ограничения и подводные камни

Portainer сильно упрощает Kubernetes, но есть нюансы:

  • Не все функции K8s доступны через интерфейс (иногда всё равно нужен kubectl).
  • Для продакшн-кластеров нужны знания RBAC и сетевых политик.
  • В больших компаниях чаще используют Rancher или OpenShift.
  • Но для обучения и домашних проектов Portainer — идеальный инструмент.

__________________________________________________________________________________________

📌 Итог

Portainer превращает Kubernetes из «монстра с YAML» в понятный инструмент.

  • Видно все Pods и Services.
  • Можно запускать приложения через Helm.
  • Удобно управлять Namespace-ами.
  • Не нужно постоянно помнить команды kubectl.

__________________________________________________________________________________________

🔹 Часть 8. Безопасность и управление доступом

Portainer — это панель, которая даёт полный доступ к контейнерам, сетям и кластерам.

Поэтому защита интерфейса — вопрос №1. Если кто-то получит доступ к вашей панели, он сможет управлять всеми вашими сервисами.

__________________________________________________________________________________________

👤 RBAC (роли и права пользователей)

Portainer поддерживает RBAC (Role-Based Access Control) — систему управления доступом.

Вы можете:

  • Создавать пользователей (админов, разработчиков, операторов).
  • Объединять их в команды (Teams).
  • Давать права на отдельные окружения или стеки.

Пример сценария:

  • У вас есть домашний сервер.
  • Один админ (вы).
  • Пара друзей, которые хотят использовать Nextcloud.
  • В Portainer вы создаёте для них аккаунты с ограниченными правами:
    доступ только к их контейнеру,
    без возможности остановить весь сервер.

👉 В Business Edition (BE) RBAC расширен: можно настраивать очень детальные права, как в корпоративных системах.

__________________________________________________________________________________________

🔒 SSL и HTTPS

По умолчанию Portainer запускается на HTTPS (порт 9443). Сертификат можно:

  1. Использовать самоподписанный (по умолчанию).
  2. Установить свой сертификат (например, Let’s Encrypt).

Установка своего сертификата

При запуске Portainer можно указать путь к сертификату:

docker run -d -p 9443:9443 \
-v /path/to/cert.pem:/certs/portainer.crt \
-v /path/to/key.pem:/certs/portainer.key \
-v portainer_data:/data \
portainer/portainer-ce

Теперь Portainer работает с вашим SSL.

📌 Совет: если у вас есть домен, настройте DNS → и используйте Let’s Encrypt для автоматического обновления сертификатов.

__________________________________________________________________________________________

🌐 Ограничение по IP

Чтобы защитить панель, можно ограничить доступ по IP.

Варианты:

  • Настроить правила firewall (iptables, ufw).
  • Использовать reverse proxy (например, Nginx Proxy Manager) и закрыть Portainer для всех, кроме вашего IP.

📌 Пример в Nginx Proxy Manager:

  • Добавляете домен portainer.domain.com.
  • Проксируете его на 9443.
  • В разделе Access Lists указываете, что доступ разрешён только IP 123.123.123.123.

__________________________________________________________________________________________

💾 Бэкапы Portainer

Все данные Portainer хранятся в томе portainer_data.

Это база, где содержатся:

  • пользователи и пароли,
  • настройки окружений,
  • информация о стеках.

📌 Чтобы сделать бэкап:

docker run --rm -v portainer_data:/data -v $(pwd):/backup alpine tar czf /backup/portainer_backup.tar.gz /data

Файл portainer_backup.tar.gz можно хранить в облаке.

В случае сбоя вы просто разворачиваете новый контейнер Portainer и загружаете бэкап.

__________________________________________________________________________________________

⚠️ Основные советы по безопасности

  1. Всегда используйте HTTPS.
  2. Никогда не оставляйте стандартный порт открытым наружу без защиты.
  3. Создавайте отдельные аккаунты для каждого пользователя.
  4. Делайте регулярные бэкапы portainer_data.
  5. Для удалённых кластеров используйте Portainer Agent + VPN.

__________________________________________________________________________________________

📌 Итог

Portainer может быть супер-безопасным, если правильно настроить:

  • SSL сертификаты,
  • роли пользователей (RBAC),
  • ограничение по IP,
  • регулярные бэкапы.

👉 Если всё это сделать, панель можно использовать даже в продакшн-среде компании.

__________________________________________________________________________________________

🔹 Часть 9. Сценарии использования

Portainer — это универсальный инструмент. Его используют и дома, и в бизнесе, и в крупных облачных инфраструктурах. Рассмотрим основные сценарии.

__________________________________________________________________________________________

🏡 1. Домашний сервер

Многие айтишники собирают у себя дома сервер на Proxmox, TrueNAS или просто на Ubuntu/Debian. На таком сервере удобно держать:

  • медиацентр (Jellyfin, Plex, Kodi),
  • облако для файлов (Nextcloud, Seafile),
  • блокировщик рекламы (AdGuard Home, Pi-hole),
  • торрент-клиент (qBittorrent, Transmission),
  • системы «умного дома» (Home Assistant).

📌 Без Portainer нужно помнить кучу Docker-команд, а с Portainer:

  • все контейнеры видны в веб-панели,
  • логи доступны в один клик,
  • обновления через кнопку Recreate.

⚡ Домашний сервер становится «как NAS», но с гибкостью Docker.

__________________________________________________________________________________________

🏢 2. Малый бизнес

Малые компании часто не могут позволить себе дорогих DevOps-инженеров. Но им нужны:

  • CRM (например, EspoCRM, ERPNext),
  • почтовый сервер,
  • системы видеонаблюдения,
  • корпоративное хранилище файлов.

📌 Сценарий:

  • Компания арендует VPS.
  • Устанавливает Docker + Portainer.
  • Разворачивает ERP-систему и Nextcloud.
  • Доступ даётся сотрудникам через VPN.

Преимущество — всё управляется из браузера, без риска «сломать сервер» при вводе команд.

__________________________________________________________________________________________

☁️ 3. Облачный хостинг

Portainer используется и в облаках (AWS, GCP, Yandex Cloud, Hetzner):

  • удобно управлять множеством Docker-нод через Portainer Agent,
  • можно подключить Kubernetes-кластер,
  • легко масштабировать микросервисы.

📌 Пример:

Интернет-магазин держит сайт в облаке.

  • Через Portainer разворачивает WordPress + MariaDB + Redis.
  • Легко обновляет образы без простоя.
  • Добавляет реплики фронтенда при росте нагрузки.

__________________________________________________________________________________________

⚙️ 4. DevOps и CI/CD

Для DevOps-инженеров Portainer — это удобный UI над инфраструктурой:

  • Разработчик пушит образ в GitHub Container Registry.
  • Jenkins или GitLab CI автоматически деплоит его в Docker/Kubernetes.
  • Через Portainer можно проверить состояние контейнеров, логи, метрики.

📌 Сценарий CI/CD:

  1. Разработчик коммитит код.
  2. GitHub Actions собирает Docker-образ.
  3. Образ пушится в Docker Hub.
  4. Portainer автоматически перезапускает контейнер с новым образом.

Результат: обновление приложения занимает минуты.

__________________________________________________________________________________________

📌 Итог

Portainer универсален:

  • 🏡 для дома — медиасерверы и «умный дом»,
  • 🏢 для бизнеса — CRM и файловые хранилища,
  • ☁️ для облаков — микросервисы и масштабируемые приложения,
  • ⚙️ для DevOps — CI/CD и мониторинг.

__________________________________________________________________________________________

🔹 Часть 10. Альтернативы и сравнение

Хотя Portainer очень удобен, он не единственный инструмент для управления контейнерами и кластерами. Давайте посмотрим на основные альтернативы и сравним их с Portainer.

__________________________________________________________________________________________

🟦 Rancher

Rancher — это мощная панель для Kubernetes.

  • Подходит для крупных компаний.
  • Поддерживает управление несколькими кластерами.
  • Имеет встроенные механизмы CI/CD, мониторинг, интеграцию с облаками.

📌 Минус: для новичков слишком сложен.

📌 Плюс: в Enterprise-сегменте Rancher — лидер.

__________________________________________________________________________________________

🟩 Kubernetes Dashboard

Это официальный UI для Kubernetes.

  • Лёгкий, минималистичный.
  • Позволяет смотреть Pods, Deployments, Services.
  • Поддерживается сообществом Kubernetes.

📌 Минус: не подходит для Docker.

📌 Плюс: идеально, если вы работаете только с Kubernetes.

__________________________________________________________________________________________

🟥 Cockpit

Cockpit — это веб-панель для управления Linux-сервером.

  • Имеет плагин для Docker.
  • Можно управлять не только контейнерами, но и пользователями, сетями, сервисами Linux.

📌 Минус: не так удобен для контейнерных кластеров.

📌 Плюс: хорош для домашних серверов и VPS.

__________________________________________________________________________________________

🟧 DockStation

DockStation — это десктопное приложение (Windows/Mac/Linux) для управления Docker.

  • Удобный UI для локальных контейнеров.
  • Есть визуализация связей между сервисами.
  • Работает без браузера.

📌 Минус: нет удалённого доступа (только локально).

📌 Плюс: идеален для разработчиков.

__________________________________________________________________________________________

-10

📌 Итог

  • Если нужен универсальный инструмент для Docker и Kubernetes → берём Portainer.
  • Если у вас корпоративный Kubernetes → лучше Rancher.
  • Если нужен минимализм → используйте Kubernetes Dashboard.
  • Если это домашний сервер Linux → подойдёт Cockpit.
  • Если вы разработчик → попробуйте DockStation.

__________________________________________________________________________________________

🔹 Часть 11. Продвинутые фичи

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

__________________________________________________________________________________________

🌍 Edge Agent

Обычно Portainer управляет контейнерами и кластерами внутри одной сети. Но что если у вас есть десятки удалённых серверов, разбросанных по разным городам и странам?

Здесь помогает Edge Agent.

  • Позволяет подключить удалённый сервер к главной панели Portainer через защищённый канал.
  • Работает даже за NAT или в домашнем интернете.
  • Поддерживает «edge-компьютинг» (IoT, удалённые филиалы).

📌 Пример:

У компании есть 5 филиалов, в каждом стоит сервер с Docker. С помощью Edge Agent всё администрируется из единого Portainer.

__________________________________________________________________________________________

🖥️ Multi-Cluster Management

Portainer поддерживает работу сразу с несколькими окружениями:

  • один локальный Docker,
  • один Kubernetes в облаке,
  • один Docker Swarm в дата-центре.

Все они отображаются в разделе Environments.

Это делает Portainer удобным для гибридной инфраструктуры: часть сервисов в облаке, часть дома, часть на VPS.

__________________________________________________________________________________________

⚙️ REST API Portainer

У Portainer есть собственный REST API, с помощью которого можно автоматизировать управление.

Возможности API:

  • создавать контейнеры,
  • разворачивать стеки,
  • управлять пользователями,
  • собирать статистику.

📌 Пример:

Можно написать скрипт, который при пуше нового Docker-образа в Docker Hub автоматически дергает Portainer API и пересоздаёт контейнер.

__________________________________________________________________________________________

🔔 Webhooks

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

📌 Сценарий:

  1. Вы заливаете новый образ на Docker Hub.
  2. Docker Hub отправляет webhook в Portainer.
  3. Portainer перезапускает контейнер с новой версией образа.

Таким образом, вы получаете CI/CD без сложных инструментов — только Portainer и Docker Hub.

__________________________________________________________________________________________

⚡ Другие полезные фишки

  • App Templates (можно создавать свои шаблоны для развёртывания приложений).
  • Edge Stacks (запуск одного стека сразу на множестве удалённых серверов).
  • Secrets (хранение паролей и токенов в защищённом виде).
  • Registries (управление приватными Docker-репозиториями).

__________________________________________________________________________________________

📌 Итог

Portainer — это не просто «панель для Docker».

  • Через Edge Agent он становится инструментом для управления распределёнными системами.
  • С помощью REST API и webhooks он превращается в платформу для автоматизации.
  • Благодаря multi-cluster management он подходит даже для гибридной облачной инфраструктуры.

__________________________________________________________________________________________

🔹 Часть 12. Практические кейсы

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

Здесь я собрал 4 пошаговых «рецепта», которые можно запустить за 10–15 минут.

__________________________________________________________________________________________

☁️ 1. Запуск Nextcloud через Portainer

Nextcloud — это ваш личный аналог Google Drive или Dropbox.

📌 Шаги:

  1. Заходим в Stacks → + Add stack.
  2. Вставляем такой docker-compose.yml:

yaml

version: '3'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: ncpass
volumes:
- db:/var/lib/mysql
app:
image: nextcloud
restart: always
ports:
- 8081:80
links:
- db
volumes:
- nextcloud:/var/www/html
volumes:
db:
nextcloud:

3. Нажимаем Deploy the stack.

4. Открываем http://<IP>:8081 → Nextcloud готов!

👉 Теперь у вас своё облако, где файлы хранятся только у вас дома/на сервере.

__________________________________________________________________________________________

🔐 2. Поднятие VPN-сервиса

Хотите VPN, чтобы безопасно выходить в интернет или заходить к себе домой? Запускаем WireGuard через Portainer.

📌 Шаги:

  1. Создаём стек vpn.
  2. Вставляем:

yaml

version: '3.8'
services:
wireguard:
container_name: wireguard
image: linuxserver/wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
- SERVERURL=myvpn.mydomain.ru
- SERVERPORT=51820
- PEERS=2
- PEERDNS=1.1.1.1
volumes:
- ./config:/config
- ./lib/modules:/lib/modules
ports:
- 51820:51820/udp
restart: unless-stopped

3. Деплоим, получаем VPN-сервер.

4. В интерфейсе Portainer видим логи, где будут сгенерированы QR-коды для подключения клиентов.

__________________________________________________________________________________________

🎬 3. Медиа-сервер (Jellyfin / Plex)

С помощью Portainer можно превратить обычный сервер в домашний Netflix.

📌 Jellyfin (open-source альтернатива Plex):

yaml

version: "3.3"
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
user: 1000:1000
ports:
- 8096:8096
volumes:
- /mnt/media:/media
- jellyfin_config:/config
restart: unless-stopped
volumes:
jellyfin_config:
  • После деплоя: http://<IP>:8096
  • Указываете папку /mnt/media с фильмами и сериалами.
  • Получаете удобный медиасервер с обложками, описаниями и стримингом на ТВ или смартфон.

__________________________________________________________________________________________

📝 4. WordPress + MySQL

Хотите быстро развернуть сайт/блог? Portainer идеально подходит для WordPress.

📌 Стек:

yaml

version: '3.3'
services:
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
restart: always
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- db_data:/var/lib/mysql
restart: always
volumes:
wordpress_data:
db_data:
  • Деплоим.
  • Открываем http://<IP>:8080.
  • Устанавливаем тему → и у вас готов сайт.

__________________________________________________________________________________________

📌 Итог

Portainer превращает запуск сложных приложений в «кулинарную книгу»:

  • Nextcloud → своё облако.
  • WireGuard → свой VPN.
  • Jellyfin → домашний Netflix.
  • WordPress → сайт за 10 минут.

И всё это без командной строки, только через веб-интерфейс.

__________________________________________________________________________________________

🔹 Часть 13. Ошибки и их решение

Portainer сам по себе очень стабилен, но в процессе работы часто встречаются типовые ошибки. Новички пугаются, а опытные админы знают: решается за пару минут.

__________________________________________________________________________________________

⚠️ Ошибка 1. Portainer не запускается

📌 Симптомы:

  • Контейнер падает сразу после запуска.
  • В логах видно permission denied или cannot connect to /var/run/docker.sock.

📌 Причины:

  • У пользователя нет доступа к сокету Docker.
  • Неправильно смонтирован том.

📌 Решение:

sudo chmod 666 /var/run/docker.sock

или добавляем своего пользователя в группу Docker:

sudo usermod -aG docker $USER

Перезапускаем контейнер.

__________________________________________________________________________________________

⚠️ Ошибка 2. SSL не работает

📌 Симптомы:

  • Панель открывается только по HTTP.
  • В браузере пишет «Ненадёжное соединение».

📌 Причины:

  • Используется самоподписанный сертификат.
  • Неправильно указан путь к сертификату при запуске.

📌 Решение:

  • Использовать Let’s Encrypt через Nginx Proxy Manager.
  • Либо указать сертификаты вручную:
docker run -d -p 9443:9443 \
-v /etc/letsencrypt/live/mysite/fullchain.pem:/certs/portainer.crt \
-v /etc/letsencrypt/live/mysite/privkey.pem:/certs/portainer.key \
-v portainer_data:/data \
portainer/portainer-ce

__________________________________________________________________________________________

⚠️ Ошибка 3. Проблемы с Docker Compose

📌 Симптомы:

  • При деплое стека появляется yaml: line X: did not find expected key.
  • Приложение не стартует.

📌 Причины:

  • Ошибки в docker-compose.yml.
  • Неправильные отступы (YAML очень чувствителен к пробелам).

📌 Решение:

  • Проверяем файл через валидатор: https://yamlchecker.com
  • Убеждаемся, что отступы — только пробелы, не табы.
  • Проверяем версии (version: "3.3").

__________________________________________________________________________________________

⚠️ Ошибка 4. Агент не подключается

📌 Симптомы:

  • В Portainer при добавлении среды пишет: Endpoint unreachable.
  • В логах агента ошибка: connection refused.

📌 Причины:

  • Порты закрыты на сервере.
  • Неправильно указан адрес агента.

📌 Решение:

  1. Проверить, открыт ли порт 8000/9000:
sudo ufw allow 8000/tcp
sudo ufw allow 9443/tcp

2. Проверить команду запуска агента:

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

3. В Portainer добавить окружение → Agent → указать IP сервера.

__________________________________________________________________________________________

⚠️ Ошибка 5. Portainer «забыл» настройки

📌 Симптомы:

  • После перезапуска всё сбросилось.
  • Нет пользователей и окружений.

📌 Причины:

  • Не смонтирован том portainer_data.

📌 Решение:

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

-v portainer_data:/data

Это хранилище всех настроек. Без него при перезапуске Portainer стартует как «чистый».

__________________________________________________________________________________________

⚠️ Ошибка 6. Portainer сильно тормозит

📌 Симптомы:

  • Долго открывается интерфейс.
  • При большом количестве контейнеров страница лагает.

📌 Причины:

  • Слабое «железо».
  • Слишком много логов у контейнеров.

📌 Решение:

  • Ограничить хранение логов (log-opts).
  • Дать больше ресурсов (RAM/CPU).
  • Включить Pagination в настройках интерфейса.

__________________________________________________________________________________________

📌 Итог

Большинство ошибок в Portainer — это:

  • права доступа,
  • неправильные YAML,
  • отсутствие тома для данных.

👉 Главное правило: всегда проверяй логи контейнера Portainer:

docker logs -f portainer

Они подскажут, где проблема.

__________________________________________________________________________________________

🔹 Часть 14. Советы для новичков

Portainer — это отличный инструмент для тех, кто только начинает работать с Docker и Kubernetes. Но чтобы он действительно помог, важно соблюдать несколько простых правил.

__________________________________________________________________________________________

🟢 С чего начать?

  1. Начни с одного контейнера.

    Не пытайся сразу развернуть целый стек с десятком сервисов.

    📌 Пример: сначала попробуй nginx или hello-world.
  2. Используй готовые образы.

    В Docker Hub есть миллионы приложений. Вбиваешь название (например, nextcloud) и сразу получаешь готовый сервис.
  3. Пойми принцип работы.
    Контейнер = запущенное приложение.
    Образ = «шаблон» для контейнера.
    Тома = данные, которые сохраняются.
    Сети = связь между контейнерами.

__________________________________________________________________________________________

🟡 Как не бояться контейнеров?

  • Не бойся ломать.
    Контейнер всегда можно удалить и пересоздать. Это не «система целиком», а маленький изолированный процесс.
  • Используй Portainer как тренажёр.
    Каждый клик — это на самом деле команда Docker под капотом. Через месяц ты начнёшь понимать, какие команды он выполняет.
  • Делай бэкапы.
    Если том с данными важен (например, база MySQL) → подключи его к папке на диске. Тогда даже при удалении контейнера данные сохранятся.

__________________________________________________________________________________________

🧰 Лучшие практики (10 золотых правил)

  1. Всегда создавай тома для данных.
    Никогда не храни данные только внутри контейнера.
  2. Используй restart: always.
    Контейнер должен подниматься после перезапуска сервера.
  3. Следи за логами.
    Логи могут разрастаться и забивать диск. Ограничь их размер.
  4. Разделяй окружения.
    Сделай разные стеки: prod, test, dev.
  5. Не храни пароли в открытом виде.
    Используй переменные окружения или секреты.
  6. Защищай Portainer.
    HTTPS.
    Ограничение по IP.
    Сильные пароли.
  7. Автоматизируй.
    Для больших проектов используй webhooks или CI/CD.
  8. Следи за обновлениями образов.
    Регулярно обновляй контейнеры (особенно публичные образы).
  9. Используй мониторинг.
    Portainer даёт базовые графики, но для серьёзных проектов настрой Prometheus + Grafana.
  10. Делай бэкапы Portainer.
    Чтобы не потерять все настройки, сохраняй том portainer_data.

__________________________________________________________________________________________

📌 Итог

Новичку важно понять:

  • Контейнеры — это не страшно.
  • Portainer создан, чтобы упростить жизнь.
  • Ошибки не фатальны — всегда можно пересоздать.

👉 Главное правило: экспериментируй, не бойся пробовать разные образы и стеки.

__________________________________________________________________________________________

🔹 Часть 15. Итог и будущее Portainer

Portainer прошёл путь от маленького проекта-надстройки над Docker до полноценной универсальной панели для контейнеров и кластеров. Сегодня это один из самых популярных инструментов, который объединяет удобство, визуализацию и мощные возможности управления.

__________________________________________________________________________________________

📌 Текущая роль в DevOps

  • Для новичков Portainer — «входной билет» в мир контейнеризации. С ним можно освоить Docker и Kubernetes, не зная сотни команд.
  • Для малого бизнеса — это замена дорогим DevOps-решениям. Позволяет разворачивать ERP, CRM, медиасерверы, облака и многое другое без отдельного инженера.
  • Для DevOps — это дополнительный инструмент визуализации и мониторинга. Он упрощает контроль, CI/CD и помогает быстрее обучать новых сотрудников.
  • Для домашних серверов — Portainer стал стандартом де-факто. Большинство гайдов по Proxmox, TrueNAS или Ubuntu для «хомлаба» включают установку Portainer.

__________________________________________________________________________________________

⚔️ Будет ли конкурировать с Rancher и OpenShift?

  • Rancher и OpenShift заточены под крупные компании и сложные Kubernetes-кластеры.
  • Portainer — лёгкий и простой, поэтому конкурировать напрямую он не будет.

👉 Но Portainer занимает свою нишу:

  • Простые и средние проекты.
  • Гибридные окружения (Docker + Kubernetes + Swarm).
  • Edge-инфраструктуры (магазины, филиалы, IoT).

В этой категории у него почти нет конкурентов.

__________________________________________________________________________________________

🔮 Перспективы развития

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

  1. Edge-компьютинг
    Управление удалёнными серверами и устройствами через Edge Agent — одно из ключевых направлений.
  2. Улучшенный Kubernetes
    Ещё более глубокая интеграция с Kubernetes: поддержка CRD, операторов и Helm-чартов.
  3. Автоматизация и CI/CD
    Расширение возможностей webhooks и REST API для полной автоматизации деплоя приложений.
  4. Безопасность
    Усиление RBAC, поддержка SSO, интеграция с корпоративными LDAP/AD.
  5. Облачные сервисы
    Вероятно, появится SaaS-версия Portainer (панель в облаке для управления всеми вашими кластерами).

__________________________________________________________________________________________

📊 Итог

Portainer стал универсальным инструментом управления контейнерами:

  • Простым для новичков.
  • Удобным для бизнеса.
  • Полезным даже в продакшн-среде.

Он не заменит Rancher или OpenShift в больших корпорациях, но для 80% задач — это лучший выбор.

💡 Если Docker стал стандартом контейнеризации, то Portainer постепенно становится стандартом визуального управления контейнерами.

✅ На этом мы закончили весь цикл из 15 частей «Portainer — Полный гид для новичков и профессионалов».