Docker Verwaltung · 12 min read · Sep 22, 2025

So installieren und verwenden Sie Portainer zur Docker-Verwaltung mit Nginx Proxy Manager

Portainer ist eine Open-Source-Lösung zur Verwaltung von Containern für Docker, Kubernetes und Nomad, die das Starten, Erstellen und Ausführen von Containern auf einfache Weise vereinfacht. Es bietet ein webbasiertes Dashboard zur Verwaltung von Containern, Bildern, Netzwerken und Volumes.

In diesem Tutorial lernen Sie, wie Sie die Portainer-Containerverwaltungs-Lösung auf einem Linux-Server installieren und konfigurieren und sie verwenden, um Docker-Container zu erstellen und zu verwalten, um verschiedene Apps auszuführen. Sie lernen auch, wie Sie diese Container hinter Nginx mit dem Nginx-Proxy-Manager platzieren.

Voraussetzungen

  • Ein Linux-Server, der Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux ausführt.
  • Ein Nicht-Root-Benutzer mit Sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN), der auf den Server für Portainer (portrainer.example.com) und Nginx Proxy Manager (npm.example.com) zeigt.

Schritt 1 - Firewall konfigurieren

Cent OS/Rocky Linux/Alma Linux

Sie sollten die Firewalld-Firewall installiert haben. Überprüfen Sie den Status der Firewall.

$ sudo firewall-cmd --state
running

Öffnen Sie die Ports 80, 9443 und 443. Portainer verwendet Port 9443, um seine Web-UI über HTTPS bereitzustellen. Nginx Proxy Manager verwendet Port 81 für seine UI.

$ 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

Laden Sie die Firewall neu, um die Änderungen zu aktivieren.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Ubuntu- und Debian-Systeme verwenden standardmäßig ufw (Uncomplicated Firewall).

Überprüfen Sie, ob die Firewall läuft.

$ sudo ufw status

Wenn sie läuft, öffnen Sie die Ports 80, 9443 und 443.

$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81

Öffnen Sie den SSH-Port, wenn die Firewall nicht läuft.

$ sudo ufw allow "OpenSSH"

Aktivieren Sie die Firewall, wenn sie nicht läuft.

$ sudo ufw enable

Wenn sie läuft, laden Sie sie neu, um die Änderungen anzuwenden.

$ sudo ufw reload

Schritt 2 - Docker installieren

Cent OS/Rocky Linux/Alma Linux

Führen Sie den folgenden Befehl aus, um Docker zu installieren.

$ 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

Aktivieren und starten Sie den Docker-Dienst.

$ sudo systemctl start docker --now

Fügen Sie Ihren Benutzernamen zur Docker-Gruppe hinzu.

$ sudo usermod -aG docker $USER

Melden Sie sich vom System ab und wieder an, um die Änderung anzuwenden.

Schritt 3 - Docker Compose installieren

Laden Sie die Docker-Compose-Binärdatei herunter und installieren Sie sie.

$ 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

Wenden Sie die Ausführungsberechtigung auf die Binärdatei an.

$ sudo chmod +x /usr/local/bin/docker-compose

Schritt 4 - Portainer installieren

Erstellen Sie ein Verzeichnis für Portainer.

$ mkdir ~/portainer

Wechseln Sie in das Verzeichnis.

$ cd ~/portainer

Erstellen und öffnen Sie die Docker-Compose-Datei zur Bearbeitung.

$ nano docker-compose.yaml

Fügen Sie den folgenden Code ein.

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

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Lassen Sie uns die Docker-Compose-Datei durchgehen.

  • Wir ziehen die neueste Version der Portainer Community Edition von Docker Hub. Die Portainer Community Edition ist kostenlos, während die Business Edition eine kostenpflichtige Lizenz erfordert. Sie können die Business Edition ziehen, aber Sie werden nach dem Lizenzschlüssel gefragt, um sie zu verwenden.
  • Wir haben unseren Container als portainer zur Identifikation und Verlinkung benannt.
  • Die Neustartpolitik ist auf always gesetzt, damit der Container beim Booten aktiv bleibt.
  • Die Einstellung privileged: true ist erforderlich, damit Portainer auf den Docker-Socket zugreifen und in einem privilegierten Kontext ausgeführt werden kann, da wir SELinux verwenden. Wenn Sie kein SELinux verwenden, können Sie diese Einstellung entfernen. Diese Einstellung gibt dem Portainer-Container Zugriff auf alles auf dem Hostsystem, einschließlich des Zugriffs auf die Hardware. Aktivieren Sie diese Einstellung nur, wenn Sie wissen, was Sie tun.
  • Der Abschnitt volumes mappt den Ordner auf dem Host auf die Ordner im Container mithilfe von Bind-Mounts. Wir haben das Verzeichnis ~/portainer/data für die Speicherung relevanter Daten und die Docker-Socket-API für die Containerverwaltung im Container bereitgestellt. Das :Z-Label sagt Docker, dass wir SELinux auf unserem Host ausführen. Wenn Sie kein SELinux aktiviert haben, sollten Sie das Label entfernen.

Starten Sie Portainer.

$ docker-compose up -d

Überprüfen Sie den Status des Containers.

$ 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

Schritt 5 - Portainer aufrufen und konfigurieren

Öffnen Sie die URL https://:9443 in Ihrem Browser, und Sie erhalten den folgenden Bildschirm.

Portainer Installationsbildschirm

Sie werden aufgefordert, einen neuen Administratorbenutzer zu erstellen. Fügen Sie Ihre Benutzerdaten hinzu. Deaktivieren Sie das Kästchen Erlauben Sie die Sammlung anonymisierter Statistiken, wenn Ihnen die Privatsphäre wichtig ist. Klicken Sie auf die Schaltfläche Benutzer erstellen, um die Installation zu starten und ein neues Administratorkonto zu erstellen.

Als Nächstes gelangen Sie zu folgendem Dashboard-Bildschirm.

Portainer Dashboard

Nach ein paar Sekunden wird es automatisch aktualisiert und zeigt Ihnen den folgenden Bildschirm.

Portainer Startseite

Es zeigt Ihnen die lokale Umgebung, in der Portainer ausgeführt wird. Klicken Sie auf die lokale Umgebung, um zu beginnen.

Portainer Umgebungs-Homepage

Die meisten Abschnitte sind selbsterklärend. Der Abschnitt Stacks hilft beim Erstellen von Containern mithilfe von Docker-Compose-Dateien. Sie können Container direkt über die Kategorie Container in der Seitenleiste bereitstellen. Sie können die aktuelle Docker-Umgebung über den Abschnitt Hosts konfigurieren. Der Abschnitt App-Vorlagen enthält vorinstallierte Docker-Compose-Dateien zur Installation der häufigsten Anwendungen. Sie können auch benutzerdefinierte Vorlagen erstellen.

Der Abschnitt Einstellungen ermöglicht es Ihnen, verschiedene Einstellungen zu konfigurieren, z. B. das Hinzufügen benutzerdefinierter Docker-Registrierungen, das Hinzufügen mehrerer Hosts für Docker Swarm, die Konfiguration des Benutzerzugriffs, das Sichern von Daten und das Anpassen von Portainer.

Schritt 5 - Portainer hinter einem Reverse-Proxy mit Nginx Proxy Manager (NPM) platzieren

Bevor wir fortfahren, lassen Sie uns Portainer hinter einem Reverse-Proxy mit Nginx Proxy Manager platzieren. Nginx Proxy Manager ist eine Docker-Anwendung, die eine webbasierte Verwaltungs-UI zum Einrichten von Nginx als Reverse-Proxy-Host bereitstellt. Es kann auch als Umleitungs- oder Streaming-Host verwendet werden.

NPM installieren

Der erste Schritt besteht darin, ein Netzwerk für Nginx Proxy Manager (NPM) zu erstellen. Öffnen Sie den Abschnitt Netzwerke und klicken Sie auf die Schaltfläche Netzwerk hinzufügen, um ein neues Netzwerk zu erstellen.

Portainer Netzwerkliste

Geben Sie dem Netzwerk einen Namen und lassen Sie alle Einstellungen unverändert. Klicken Sie auf die Schaltfläche Netzwerk erstellen, um den Vorgang abzuschließen.

Portainer Netzwerk erstellen Seite

Besuchen Sie die Stacks und erstellen Sie einen neuen Stack mit der Schaltfläche Stack hinzufügen.

Portainer Stacks Seite

Nennen Sie den Stack nginx-proxy-manager und fügen Sie den folgenden Code ein.

version: "3.3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Öffentlicher HTTP-Port
      - '443:443' # Öffentlicher HTTPS-Port
      - '81:81' # Admin-Web-Port
      # Fügen Sie jeden anderen Stream-Port hinzu, den Sie exponieren möchten
      # - '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"
      # Kommentieren Sie die folgende Zeile aus, wenn IPv6 auf Ihrem Host nicht aktiviert ist
      # 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 Stack hinzufügen Seite

Wir haben zwei Umgebungsvariablen festgelegt, um die Datenbank- und Root-MySQL-Passwörter festzulegen. Portainer kann verwendet werden, um Geheimnisse mithilfe von Umgebungsvariablen festzulegen. Scrollen Sie nach unten auf der Seite und klicken Sie auf die Schaltfläche Umgebungsvariable hinzufügen, um starke Passwörter hinzuzufügen.

Portainer Stack-Umgebungsvariablen

Klicken Sie auf die Schaltfläche Stack bereitstellen, um den NPM-Container zu erstellen und zu starten.

NPM aufrufen

Öffnen Sie die URL https://:81 in Ihrem Browser, und Sie erhalten den folgenden Bildschirm. Geben Sie die folgenden Standardanmeldeinformationen ein, um sich anzumelden.

E-Mail-Adresse: [email protected] Passwort: changeme

Als Nächstes werden Sie sofort aufgefordert, einen Namen und eine E-Mail-Adresse festzulegen. Klicken Sie auf die Schaltfläche Speichern, und Sie werden aufgefordert, ein neues Passwort zu erstellen. Klicken Sie erneut auf die Schaltfläche Speichern, um zu beginnen.

Nginx Proxy Manager Dashboard

Besuchen Sie die Hosts >> Proxy-Hosts und klicken Sie auf die Schaltfläche Proxy-Host hinzufügen.

Portainer als Proxy-Host hinzufügen

Geben Sie den Domainnamen als portainer.example.com ein. Wählen Sie das Schema als https. Geben Sie den Namen des Containers als Weiterleitungs-Hostname und 9443 als Weiterleitungsport ein. Aktivieren Sie die Optionen Blockieren häufiger Exploits und Websockets-Unterstützung.

Portainer NPM SSL-Optionen

Wechseln Sie zur SSL-Registerkarte und wählen Sie Ein neues SSL-Zertifikat anfordern aus dem Dropdown-Menü. Aktivieren Sie die Optionen SSL erzwingen und HTTP/2-Unterstützung, um Ihre SSL-Verbindung zu sichern und zu optimieren. Geben Sie die E-Mail-Adresse ein, um Erneuerungsbenachrichtigungen zu erhalten, und stimmen Sie den Nutzungsbedingungen zu. Klicken Sie auf die Schaltfläche Speichern, um die Einrichtung des Proxy-Hosts für Portainer abzuschließen.

Portainer mit dem NPM-Container verbinden

Wir haben den Proxy-Host eingerichtet, aber der Container ist noch nicht mit dem NPM-Netzwerk verbunden. Gehen Sie zurück zum Portainer-Dashboard, besuchen Sie den Abschnitt Container und wählen Sie den portainer-Container aus.

Wählen Sie npm-network aus dem Dropdown-Menü im Abschnitt Verbundenen Netzwerke und klicken Sie auf die Schaltfläche Netzwerk beitreten, um den Portainer-Container mit dem Netzwerk des Proxy-Managers zu verbinden.

Portainer verbundene Netzwerke

Sie könnten einen Fehler erhalten, aber aktualisieren Sie die Seite, und Sie sollten sehen, dass der Container dem NPM-Netzwerk hinzugefügt wurde.

Portainer mit NPM verbunden

Sie sollten in der Lage sein, Portainer über die URL https://portainer.example.com in Ihrem Browser aufzurufen.

Sie können ein ähnliches Verfahren verwenden, um NPM hinter einer öffentlich zugänglichen URL wie https://npm.example.com zu platzieren, wie in unserem Nginx Proxy Manager-Tutorial besprochen.

Jetzt, da Sie eine öffentliche URL für Portainer festgelegt haben, können Sie den exponierten Port 9443 entfernen. Gehen Sie dazu zurück zum Terminal und wechseln Sie in das Portainer-Verzeichnis.

$ cd ~/portainer

Öffnen Sie die Docker-Compose-Datei zur Bearbeitung.

$ nano docker-compose.yaml

Kommentieren Sie den Abschnitt Ports aus, wie unten gezeigt.

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

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Hier haben wir die Details des NPM-Netzwerks hinzugefügt, da wir den Portainer-Container neu starten müssen.

Stoppen Sie den Portainer-Container.

$ docker-compose down --remove-orphans

Starten Sie den Container erneut mit der aktualisierten Konfiguration.

$ docker-compose up -d

Schritt 6 - Einen Container mit einer App-Vorlage bereitstellen

Portainer bietet mehrere vordefinierte Vorlagen, um Anwendungen direkt mit minimaler Konfiguration zu starten.

Portainer App-Vorlagen

Besuchen Sie den Abschnitt App-Vorlagen und wählen Sie eine Vorlage aus. Geben Sie ihr einen Namen und wählen Sie das Netzwerk zur Verwendung aus. Verwenden Sie den Abschnitt für erweiterte Optionen, um benutzerdefinierte Ports, Netzwerke und Volume-Mounts bereitzustellen.

Klicken Sie auf die Schaltfläche Container bereitstellen, um die Bereitstellung Ihrer Anwendung abzuschließen. Hier stellen wir den Redis-Container bereit.

Portainer Redis App-Bereitstellung

Schritt 7 - Container verwalten

Lassen Sie uns einen vorhandenen Container verwalten. Öffnen Sie die Containerseite, und Sie sehen alle laufenden Container.

Portainer Containerliste

Klicken Sie auf den kürzlich erstellten hw-redis-Container, um fortzufahren.

Portainer Containeraktionen

Oben sehen Sie eine Liste von Aktionen, die Sie auf einem laufenden Container ausführen können. Sie können den Container stoppen und beenden. Mit der Option Neu erstellen wird der Container von Grund auf neu erstellt. Die Option Duplizieren/Bearbeiten ermöglicht es Ihnen, einen weiteren identischen Container zu erstellen, sodass Sie die Einstellungen vor dem Start ändern können.

Der Containerstatus zeigt die Laufzeit, die IP-Adresse und andere Details zum Container an.

Die Option Protokolle zeigt die Ausgabe des Befehls docker logs. Da die Ausgabe des Befehls nicht zwischengespeichert wird, wird der Befehl jedes Mal von neuem ausgeführt, wenn Sie die Seite aktualisieren.

Portainer Containerprotokolle

Die Option Überprüfen führt den Befehl docker inspect auf dem Container aus und zeigt dessen Ausgabe an.

Portainer Container überprüfen

Die Option Statistiken zeigt Ihnen die Nutzung des Containers in Echtzeit an.

Portainer Containerstatistiken

Sie können die Container-Konsole mit der Option Konsole starten. Sie werden nach dem Befehl und dem Systembenutzer gefragt, um ihn auszuführen.

Portainer Container-Konsole konfigurieren

Drücken Sie die Schaltfläche Verbinden, um die Konsole zu starten.

Portainer Container-Konsole-Shell

Die Option Anhängen führt den Befehl docker attach aus.

Es gibt weitere Optionen auf der Seite mit den Containerdetails. Sie können ein Bild mit einem vorhandenen Container erstellen. Weitere Optionen umfassen das Ändern der Neustartpolitik eines Containers und das Verbinden oder Trennen eines Netzwerks von einem vorhandenen Container.

Einen externen Container mit Portainer verbinden

Das Erstellen eines Containers außerhalb von Portainer wird innerhalb von Portainer angezeigt, solange er auf demselben System erstellt wird, auf dem Portainer ausgeführt wird. Dies ist möglich, da Portainer über das Websocket mit Docker verbunden ist.

Lassen Sie uns testen, indem wir den Hello World Docker-Container ausführen.

$ 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/

Überprüfen Sie die Containerliste im Terminal. Wir verwenden das Flag -a, um die Liste aller Container, einschließlich der gestoppten, anzuzeigen. Sie können den Namen des Containers als sad_williamson sehen.

$ 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
.....

Überprüfen Sie nun die Portainer-Containerseite, und der Hello World-Container wird mit demselben Namen als gestoppt in der Liste angezeigt.

Portainer Hello World Container

Fazit

Damit endet unser Tutorial zur Installation und Verwendung von Portainer zur Docker-Verwaltung und Nginx Proxy Manager. Wir werden in einem kommenden Tutorial das Erstellen von Docker-Images, das Erstellen benutzerdefinierter Container und die Verwendung von Portainer mit Docker Swarm erkunden. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.