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
portainerzur Identifikation und Verlinkung benannt. - Die Neustartpolitik ist auf
alwaysgesetzt, damit der Container beim Booten aktiv bleibt. - Die Einstellung
privileged: trueist 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
volumesmappt den Ordner auf dem Host auf die Ordner im Container mithilfe von Bind-Mounts. Wir haben das Verzeichnis~/portainer/datafü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:// in Ihrem Browser, und Sie erhalten den folgenden Bildschirm.

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.

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

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

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.

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.

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

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

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.

Klicken Sie auf die Schaltfläche Stack bereitstellen, um den NPM-Container zu erstellen und zu starten.
NPM aufrufen
Öffnen Sie die URL https:// 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.

Besuchen Sie die Hosts >> Proxy-Hosts und klicken Sie auf die Schaltfläche 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.

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.

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

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.

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.

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

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

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.

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

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

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

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

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.

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.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.