Что такое Portainer?
Portainer — это мощный веб-интерфейс для управления Docker контейнерами, образами, сетями и томами. Он превращает сложные команды Docker CLI в интуитивно понятный графический интерфейс, делая управление контейнерами доступным для всех членов команды.
Ключевые возможности Portainer
- Веб-интерфейс — управление через браузер
- Multi-platform — Docker, Kubernetes, Docker Swarm
- Управление пользователями — команды и роли
- Шаблоны приложений — быстрое развертывание
- Мониторинг ресурсов — использование CPU, памяти
- Логи и консоль — доступ к контейнерам
Установка Portainer
Установка с помощью Docker:
1# Создание тома для данных Portainer
2docker volume create portainer_data
3
4# Запуск Portainer Server
5docker run -d \
6 -p 8000:8000 \
7 -p 9443:9443 \
8 --name portainer \
9 --restart=always \
10 -v /var/run/docker.sock:/var/run/docker.sock \
11 -v portainer_data:/data \
12 portainer/portainer-ce:latest
13
14# Доступ через браузер
15# https://localhost:9443
Установка через Docker Compose:
1# docker-compose.yml
2version: '3.8'
3
4services:
5 portainer:
6 image: portainer/portainer-ce:latest
7 container_name: portainer
8 restart: always
9 ports:
10 - "8000:8000"
11 - "9443:9443"
12 volumes:
13 - /var/run/docker.sock:/var/run/docker.sock
14 - portainer_data:/data
15 environment:
16 - PORTAINER_ADMIN_PASSWORD_FILE=/run/secrets/portainer_password
17 secrets:
18 - portainer_password
19
20volumes:
21 portainer_data:
22
23secrets:
24 portainer_password:
25 file: ./portainer_password.txt
Первоначальная настройка
После первого запуска:
- Открой браузер и перейди на https://localhost:9443
- Создай учетную запись администратора
- Выбери тип окружения (Docker, Kubernetes)
- Подключись к локальному Docker daemon
Управление контейнерами
Основные операции через веб-интерфейс:
- Просмотр контейнеров — статус, ресурсы, порты
- Создание контейнеров — из образов или шаблонов
- Управление жизненным циклом — старт, стоп, рестарт
- Просмотр логов — в реальном времени
- Доступ к консоли — exec в контейнеры
Работа с Docker Compose
Portainer поддерживает развертывание стеков через Docker Compose:
1# Пример стека в Portainer
2version: '3.8'
3services:
4 web:
5 image: nginx:alpine
6 ports:
7 - "80:80"
8 volumes:
9 - ./html:/usr/share/nginx/html
10 depends_on:
11 - db
12
13 db:
14 image: postgres:13
15 environment:
16 POSTGRES_DB: myapp
17 POSTGRES_USER: user
18 POSTGRES_PASSWORD: password
19 volumes:
20 - db_data:/var/lib/postgresql/data
21
22volumes:
23 db_data:
Шаблоны приложений
Portainer предоставляет готовые шаблоны для популярных приложений:
- Базы данных — MySQL, PostgreSQL, MongoDB
- Веб-серверы — Nginx, Apache, Caddy
- Мониторинг — Grafana, Prometheus
- CI/CD — Jenkins, GitLab Runner
- CMS — WordPress, Drupal
Управление пользователями и командами
Мониторинг ресурсов
Portainer показывает метрики в реальном времени:
- Использование CPU и памяти контейнерами
- Сетевой трафик
- Использование дискового пространства
- Статистика по образам
Интеграция с Kubernetes
Portainer поддерживает управление Kubernetes кластерами:
Резервное копирование и восстановление
1# Создание резервной копии данных Portainer
2docker run --rm \
3 -v portainer_data:/data \
4 -v $(pwd):/backup \
5 alpine tar czf /backup/portainer-backup.tar.gz -C /data .
6
7# Восстановление из резервной копии
8docker run --rm \
9 -v portainer_data:/data \
10 -v $(pwd):/backup \
11 alpine tar xzf /backup/portainer-backup.tar.gz -C /data
API и автоматизация
Portainer предоставляет REST API для автоматизации:
1import requests
2import json
3
4# Аутентификация
5def authenticate(username, password):
6 url = "https://localhost:9443/api/auth"
7 payload = {
8 "username": username,
9 "password": password
10 }
11 response = requests.post(url, json=payload, verify=False)
12 return response.json()["jwt"]
13
14# Получение списка контейнеров
15def get_containers(token):
16 url = "https://localhost:9443/api/endpoints/1/docker/containers/json"
17 headers = {"Authorization": f"Bearer {token}"}
18 response = requests.get(url, headers=headers, verify=False)
19 return response.json()
20
21# Создание контейнера
22def create_container(token, image, name):
23 url = "https://localhost:9443/api/endpoints/1/docker/containers/create"
24 headers = {"Authorization": f"Bearer {token}"}
25 payload = {
26 "Image": image,
27 "name": name,
28 "ExposedPorts": {"80/tcp": {}},
29 "HostConfig": {
30 "PortBindings": {"80/tcp": [{"HostPort": "8080"}]}
31 }
32 }
33 response = requests.post(url, json=payload, headers=headers, verify=False)
34 return response.json()
Безопасность
Рекомендации по безопасности Portainer:
- Используй HTTPS с валидными сертификатами
- Настрой строгую аутентификацию
- Ограничь доступ к Docker socket
- Регулярно обновляй Portainer
- Используй роли для ограничения доступа
Альтернативы Portainer
- Docker Desktop — встроенный GUI для Docker
- Rancher — полноценная платформа управления контейнерами
- Kubernetes Dashboard — для управления K8s
- Lazydocker — терминальный UI для Docker
Сравнение редакций Portainer
Функция | Community Edition | Business Edition |
---|---|---|
Базовое управление | ✅ | ✅ |
RBAC | Базовый | Расширенный |
LDAP/AD интеграция | ❌ | ✅ |
Поддержка | Сообщество | Коммерческая |
Случаи использования Portainer
- Разработка — быстрое тестирование контейнеров
- Обучение — изучение Docker без CLI
- Небольшие команды — простое управление инфраструктурой
- Демонстрации — наглядное представление архитектуры
Преимущества Portainer
- Простой и интуитивный интерфейс
- Быстрая установка и настройка
- Поддержка множества платформ
- Активное сообщество и развитие
- Бесплатная версия с основными функциями
Рекомендации по использованию
- Настрой регулярные резервные копии данных
- Используй шаблоны для стандартизации развертываний
- Настрой мониторинг ресурсов
- Обучи команду основам работы с интерфейсом
FAQ
Безопасно ли давать доступ к Docker socket?
Доступ к Docker socket даёт полные права на хост. Используй Portainer только в доверенной среде или настрой удалённое подключение через TLS.
Можно ли использовать Portainer в production?
Да, но рекомендуется Business Edition для production окружений с расширенными функциями безопасности и поддержкой.