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://:9443 в вашем браузере, и вы увидите следующий экран.

Экран установки Portainer

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

Затем вы перейдете на следующий экран панели управления.

Панель управления Portainer

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

Главная Portainer

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

Главная страница среды Portainer

Большинство разделов являются самодостаточными. Раздел 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, чтобы создать новую сеть.

Список сетей Portainer

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

Страница создания сети Portainer

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

Страница стеков Portainer

Назовите стек 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

Страница добавления стека Portainer

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

Переменные окружения стека Portainer

Нажмите кнопку Deploy the stack, чтобы создать и запустить контейнер NPM.

Доступ к NPM

Откройте URL https://:81 в вашем браузере, и вы увидите следующий экран. Введите следующие учетные данные по умолчанию, чтобы войти.

Адрес электронной почты: [email protected] Пароль: changeme

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

Панель управления Nginx Proxy Manager

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

Добавить Portainer как прокси-хост

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

Опции SSL Portainer NPM

Перейдите на вкладку 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 в сеть менеджера прокси.

Подключенные сети Portainer

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

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 предоставляет несколько предопределенных шаблонов для запуска приложений напрямую с минимальной конфигурацией.

Шаблоны приложений Portainer

Перейдите в раздел App Templates и выберите любой шаблон. Дайте ему имя и выберите сеть для использования. Используйте раздел расширенных опций для развертывания пользовательских портов, сетей и монтирования томов.

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

Развертывание приложения Redis Portainer

Шаг 7 - Управление контейнерами

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

Список контейнеров Portainer

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

Действия с контейнером Portainer

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

Статус контейнера показывает время работы, IP-адрес и другие детали о контейнере.

Опция Logs показывает вывод команды docker logs. Поскольку вывод команды не кэшируется, каждый раз, когда вы обновляете страницу, команда выполняется заново.

Логи контейнера Portainer

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

Инспекция контейнера Portainer

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

Статистика контейнера Portainer

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

Конфигурация консоли контейнера Portainer

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

Консоль контейнера Portainer

Опция 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 появится в списке как остановленный с тем же именем.

Контейнер Hello World Portainer

Заключение

Это завершает наше руководство по установке и использованию Portainer для управления Docker и Nginx Proxy Manager. Мы исследуем создание образов Docker, создание пользовательских контейнеров и использование Portainer с Docker swarm в следующем руководстве. Если у вас есть вопросы, оставляйте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.