Docker управление · 11 min read · Sep 22, 2025
Как установить и использовать Portainer для управления Docker с Nginx Proxy Manager

Portainer — это решение для управления контейнерами с открытым исходным кодом для Docker, Kubernetes и Nomad, которое упрощает запуск, создание и управление контейнерами простым способом. Оно предоставляет веб-интерфейс для управления контейнерами, образами, сетями и томами.
В этом руководстве вы научитесь устанавливать и настраивать решение для управления контейнерами Portainer на сервере Linux и использовать его для создания и управления контейнерами Docker для запуска различных приложений. Вы также научитесь размещать эти контейнеры за Nginx с помощью менеджера прокси Nginx.
Предварительные требования
- Сервер Linux с установленной Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux.
- Пользователь без прав root с правами sudo.
- Полное доменное имя (FQDN), указывающее на сервер для Portainer (
portrainer.example.com) и Nginx Proxy Manager (npm.example.com).
Шаг 1 - Настройка брандмауэра
Cent OS/Rocky Linux/Alma Linux
У вас должен быть установлен брандмауэр Firewalld. Проверьте статус брандмауэра.
$ sudo firewall-cmd --state
running
Откройте порты 80, 9443 и 443. Portainer использует порт 9443 для экспонирования своего веб-интерфейса через HTTPS. Nginx Proxy Manager использует порт 81 для своего интерфейса.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=9443/tcp
$ sudo firewall-cmd --permanent --add-port=81/tcp
Перезагрузите брандмауэр, чтобы применить изменения.
$ sudo firewall-cmd --reload
Ubuntu/Debian
Системы Ubuntu и Debian по умолчанию используют ufw (Uncomplicated Firewall).
Проверьте, работает ли брандмауэр.
$ sudo ufw status
Если он работает, откройте порты 80, 9443 и 443.
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81
Откройте порт SSH, если брандмауэр не работает.
$ sudo ufw allow "OpenSSH"
Включите брандмауэр, если он не работает.
$ sudo ufw enable
Если он работает, перезагрузите его, чтобы применить изменения.
$ sudo ufw reload
Шаг 2 - Установка Docker
Cent OS/Rocky Linux/Alma Linux
Запустите следующую команду для установки Docker.
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Debian
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Включите и запустите службу Docker.
$ sudo systemctl start docker --now
Добавьте свое имя пользователя в группу Docker.
$ sudo usermod -aG docker $USER
Выйдите из системы и войдите снова, чтобы применить изменения.
Шаг 3 - Установка Docker Compose
Скачайте и установите бинарный файл Docker Compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Примените разрешение на выполнение к бинарному файлу.
$ sudo chmod +x /usr/local/bin/docker-compose
Шаг 4 - Установка Portainer
Создайте каталог для Portainer.
$ mkdir ~/portainer
Перейдите в каталог.
$ cd ~/portainer
Создайте и откройте файл Docker Compose для редактирования.
$ nano docker-compose.yaml
Вставьте следующий код в него.
version: "3.3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
privileged: true
volumes:
- ./data:/data:Z
- /var/run/docker.sock:/var/run/docker.sock:Z
ports:
- 9443:9443
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Давайте рассмотрим файл Docker Compose.
- Мы загружаем последнюю версию Portainer Community Edition из Docker Hub. Portainer Community Edition бесплатен для использования, в то время как их бизнес-версия требует платной лицензии. Вы можете загрузить бизнес-версию, но вам будет предложено ввести лицензионный ключ для ее использования.
- Мы назвали наш контейнер
portainerдля идентификации и связывания. - Политика перезапуска установлена на
always, чтобы контейнер оставался активным во время загрузки. - Настройка
privileged: trueпозволяет Portainer получить доступ к сокету Docker и работать в привилегированном контексте, так как мы используем SELinux. Если вы не используете SELinux, вы можете удалить эту настройку. Эта настройка дает контейнеру Portainer доступ ко всему на хост-системе, включая доступ к оборудованию. Поэтому включайте эту настройку только тогда, когда вы знаете, что делаете. - Раздел
volumesсопоставляет папку на хосте с папками в контейнере, используя привязанные монтирования. Мы открыли директорию~/portainer/dataдля контейнера для хранения любых соответствующих данных и API сокета Docker для управления контейнерами. Метка:Zговорит Docker, что мы используем SELinux на нашем хосте. Если у вас не включен SELinux, вы должны удалить метку.
Запустите Portainer.
$ docker-compose up -d
Проверьте статус контейнера.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
916411e8d12e portainer/portainer-ce:latest "/portainer" 5 seconds ago Up 4 seconds 8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp portainer
Шаг 5 - Доступ и настройка Portainer
Откройте URL https:// в вашем браузере, и вы увидите следующий экран.

Вам будет предложено создать нового администратора. Добавьте свои данные пользователя. Снимите галочку с поля Разрешить сбор анонимной статистики, если вам важна конфиденциальность. Нажмите кнопку Создать пользователя, чтобы начать установку и создать новую учетную запись администратора.
Затем вы перейдете на следующий экран панели управления.

Через несколько секунд он автоматически обновится и покажет вам следующий экран.

Он покажет вам локальную среду, в которой работает Portainer. Нажмите на среду local, чтобы начать.

Большинство разделов являются самодостаточными. Раздел Stacks помогает создавать контейнеры с помощью файлов Docker Compose. Вы можете развернуть контейнеры напрямую, используя категорию Containers в боковой панели. Вы можете настроить текущую среду Docker через раздел Hosts. Раздел App Templates поставляется с предустановленными файлами Docker Compose для установки наиболее распространенных приложений. Вы также можете создавать пользовательские шаблоны.
Раздел Settings позволяет вам настраивать различные параметры, такие как добавление пользовательских реестров Docker, добавление нескольких хостов для Docker swarm, настройка доступа пользователей, резервное копирование данных и настройка Portainer.
Шаг 5 - Разместите Portainer за обратным прокси с помощью Nginx Proxy Manager (NPM)
Перед тем как продолжить, давайте разместим Portainer за обратным прокси с помощью Nginx Proxy Manager. Nginx Proxy Manager — это приложение Docker, которое предоставляет веб-интерфейс для настройки Nginx в качестве хоста обратного прокси. Его также можно использовать в качестве перенаправляющего или стримингового хоста.
Установка NPM
Первый шаг — создать сеть для Nginx Proxy Manager (NPM). Откройте раздел Networks и нажмите кнопку Add Network, чтобы создать новую сеть.

Дайте сети имя и оставьте все настройки без изменений. Нажмите кнопку Create the network, чтобы завершить.

Перейдите в раздел Stacks и создайте новый стек, используя кнопку Add stack.

Назовите стек nginx-proxy-manager и вставьте следующий код в него.
version: "3.3"
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # Публичный HTTP порт
- '443:443' # Публичный HTTPS порт
- '81:81' # Админ веб порт
# Добавьте любой другой стриминговый порт, который хотите открыть
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
DB_MYSQL_NAME: "npm"
# Раскомментируйте строку ниже, если IPv6 не включен на вашем хосте
# DISABLE_IPV6: 'true'
volumes:
- ./npm-data:/data:Z
- ./letsencrypt:/etc/letsencrypt:Z
depends_on:
- npm-db
networks:
- npm-network
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
volumes:
- ./npm-data/mysql:/var/lib/mysql:Z
networks:
- npm-internal
networks:
npm-internal:
npm-network:
external: true

Мы установили две переменные окружения для установки паролей базы данных и root MySQL. Portainer можно использовать для установки секретов с помощью переменных окружения. Прокрутите вниз страницы и нажмите кнопку Add environment variable, чтобы добавить надежные пароли.

Нажмите кнопку Deploy the stack, чтобы создать и запустить контейнер NPM.
Доступ к NPM
Откройте URL https:// в вашем браузере, и вы увидите следующий экран. Введите следующие учетные данные по умолчанию, чтобы войти.
Адрес электронной почты: [email protected] Пароль: changeme
Затем вам будет предложено сразу установить имя и адрес электронной почты. Нажмите кнопку Save, и вам будет предложено создать новый пароль. Нажмите кнопку Save снова, чтобы начать.

Перейдите в раздел Hosts >> Proxy Hosts и нажмите кнопку Add Proxy Host.

Введите доменное имя как portainer.example.com. Выберите схему как https. Введите имя контейнера как Forward Hostname и 9443 как Forward port. Убедитесь, что выбраны параметры Block Common Exploits и Websockets Support.

Перейдите на вкладку SSL и выберите Request a new SSL Certificate из выпадающего меню. Убедитесь, что выбраны параметры Force SSL и HTTP/2 Support, чтобы обеспечить безопасность и оптимизировать ваше SSL-соединение. Введите адрес электронной почты для получения уведомлений о продлении и согласитесь с условиями обслуживания. Нажмите кнопку Save, чтобы завершить настройку прокси-хоста для Portainer.
Подключите Portainer к контейнеру NPM
Мы настроили прокси-хост, но контейнер все еще не подключен к сети NPM. Вернитесь на панель управления Portainer, перейдите в раздел Containers и выберите контейнер portainer.
Выберите npm-network из выпадающего меню в разделе Connected networks и нажмите кнопку Join network, чтобы добавить контейнер Portainer в сеть менеджера прокси.

Вы можете получить ошибку, но обновите страницу, и вы должны увидеть контейнер, добавленный в сеть NPM.

Вы должны иметь возможность получить доступ к Portainer, используя URL https://portainer.example.com в вашем браузере.
Вы можете следовать аналогичной процедуре, чтобы разместить NPM за общедоступным URL, таким как https://npm.example.com, как обсуждалось в нашем руководстве по Nginx Proxy Manager.
Теперь, когда вы установили общедоступный URL для Portainer, вы можете удалить открытый порт 9443. Для этого вернитесь в терминал и перейдите в каталог portainer.
$ cd ~/portainer
Откройте файл Docker Compose для редактирования.
$ nano docker-compose.yaml
Удалите раздел портов, закомментировав его, как показано ниже.
version: "3.3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
privileged: true
volumes:
- ./data:/data:Z
- /var/run/docker.sock:/var/run/docker.sock:Z
#ports:
# - 9443:9443
networks:
- npm-network
networks:
npm-network:
external: true
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Здесь мы добавили детали сети NPM, потому что нам нужно будет перезапустить контейнер Portainer.
Остановите контейнер Portainer.
$ docker-compose down --remove-orphans
Запустите контейнер снова с обновленной конфигурацией.
$ docker-compose up -d
Шаг 6 - Развертывание контейнера с использованием шаблона приложения
Portainer предоставляет несколько предопределенных шаблонов для запуска приложений напрямую с минимальной конфигурацией.

Перейдите в раздел App Templates и выберите любой шаблон. Дайте ему имя и выберите сеть для использования. Используйте раздел расширенных опций для развертывания пользовательских портов, сетей и монтирования томов.
Нажмите кнопку Deploy the container, чтобы завершить развертывание вашего приложения. Здесь мы развертываем контейнер Redis.

Шаг 7 - Управление контейнерами
Давайте управлять существующим контейнером. Откройте страницу контейнеров, и вы увидите все работающие контейнеры.

Нажмите на недавно созданный контейнер hw-redis, чтобы продолжить.

Сверху вы можете увидеть список действий, которые вы можете выполнить с работающим контейнером. Вы можете остановить и убить контейнер. Воссоздание создаст контейнер с нуля. Опция Duplicate/Edit позволит вам создать другой идентичный контейнер, позволяя вам изменить настройки перед его запуском.
Статус контейнера показывает время работы, IP-адрес и другие детали о контейнере.
Опция Logs показывает вывод команды docker logs. Поскольку вывод команды не кэшируется, каждый раз, когда вы обновляете страницу, команда выполняется заново.

Опция Inspect выполняет команду docker inspect на контейнере и показывает ее вывод.

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

Вы можете запустить консоль контейнера, используя опцию Console. Вам будет предложено ввести команду и системного пользователя для выполнения.

Нажмите кнопку Connect, чтобы запустить консоль.

Опция Attach выполняет команду docker attach.
На странице деталей контейнера есть и другие опции. Вы можете создать образ, используя существующий контейнер. Другие опции включают изменение политики перезапуска контейнера и подключение или отключение сети к существующему контейнеру.
Присоединение внешнего контейнера к Portainer
Создание любого контейнера вне Portainer будет отображаться внутри него, если он создан на той же системе, на которой работает Portainer. Это возможно, потому что Portainer подключен к Docker с помощью веб-сокета.
Давайте протестируем, запустив контейнер Hello World Docker.
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Проверьте список контейнеров в терминале. Мы используем флаг -a, чтобы показать список всех контейнеров, включая остановленные. Вы можете увидеть имя контейнера как sad_williamson.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa46b85d594 hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago sad_williamson
.....
Теперь проверьте страницу контейнеров Portainer, и контейнер hello world появится в списке как остановленный с тем же именем.

Заключение
Это завершает наше руководство по установке и использованию Portainer для управления Docker и Nginx Proxy Manager. Мы исследуем создание образов Docker, создание пользовательских контейнеров и использование Portainer с Docker swarm в следующем руководстве. Если у вас есть вопросы, оставляйте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.