Zuletzt aktualisiert am 26. Juni 2024.
Containerisierung mit Docker ist eine feine Sache und eigentlich komplett über die Konsole möglich. Manchmal ist aber trotzdem ein GUI intuitiver zu bedienen und bietet mehr Informationen auf einen Blick. Daher schauen wir uns heute mal an, wie man einen neuen Docker-Host aufsetzen und mittels Portainer-GUI nutzen kann.
Docker ist eine Open-Source-Plattform, die Entwicklern und Systemadministratoren hilft, Anwendungen in Containern zu entwickeln, bereitzustellen und auszuführen. Ein Container ist eine leichtgewichtige, eigenständige Einheit, die alle notwendigen Komponenten (Code, Laufzeit, Systemtools, Bibliotheken und Einstellungen) enthält, um eine Software auszuführen. Dadurch wird sichergestellt, dass die Anwendung unabhängig von der Umgebung, in der sie ausgeführt wird, konsistent bleibt.
Portainer ist eine benutzerfreundliche Open-Source-Verwaltungsschnittstelle für Docker und Kubernetes. Es bietet eine grafische Benutzeroberfläche (GUI), mit der Entwickler und Systemadministratoren ihre Container, Images, Netzwerke und Volumes verwalten können, ohne die Kommandozeile verwenden zu müssen.
Das coole ist, dass Portainer selbst als Dokcer-Container läuft und ganz einfach über einen Browser verwendet werden kann.
Schritt 1: Docker installieren
Wir fangen from the Scratch an. Wir haben ein neu installiertes Ubuntu-System.
Jetzt gibt es verschiedene Möglichkeiten für die Installation von Docker, diese sind hier beschrieben.
Der effiziente ITler entscheidet sich für das zur Verfügung gestellte Installationsskript 😉
Also einmal downloaden:
curl -fsSL https://get.docker.com -o get-docker.sh
Und dann ausführen:
sudo sh ./get-docker.sh
Das Skript stammt direkt von der Docker-Seite, bitte aufpassen, keine Skripte von Drittseiten einfach auszuführen.
Wenn das Installationsskript durchgelaufen ist, sieht das Ganze so aus:
Was macht das Installationsskript eigentlich?
Das obige Installationsskript lädt die aktuellen Docker-Binaries herunter und fügt die Docker-Paketquellen zu den Paketquellen des Systems hinzu. Dadurch kannst du in Zukunft ganz einfach deine Docker-Version mit dem Rest des Systems mittels folgender Befehle updaten:
Zuerst die Paketquellen aktualisieren:
sudo apt update
Dann die Updates installieren:
sudo apt upgrade
Wie man sieht, wird bei einem “apt update” nun die Paketquelle von Docker berücksichtigt:
Schritt 2: Portainer installieren
Wir gehen dazu zur Portainer-Webseite in den Installationsbereich (https://www.portainer.io/install) und wählen die “Community Edition”, dann eine neue Installation (“Set up a new Portainer CE Server installation”), “Docker Standalone” und dann “Install Portainer CE with Docker on Linux”.
Wir landen dann auf der folgenden Seite, auf der die Installation beschrieben ist:
https://docs.portainer.io/start/install-ce/server/docker/linux
Als nächstes – und das ist wichtig – erstellen wir ein docker-volume für unseren Portainer-Container. Das machen wir, weil grundsätzlich alle Daten in einem Docker-Container flüchtig sind. Das bedeutet, wenn wir einen Container erstellen, darin Daten anfallen und wir diesen Container beenden, sind alle erzeugten Daten futsch.
Daher erstellen wir mit folgendem Befehl ein persistentes Docker-Volume:
docker volume create portainer_data
Tipp: Wenn du einen Fehler wie “var/run/docker.sock: connect: permission denied” erhältst, führe den Befehl noch einmal mit einem vorangestellten “sudo” aus 😉
Was bedeutet “persistent”? Was ist Persistenz?
Persistenz bezeichnet in der Informatik die Eigenschaft von Daten, über die Laufzeit des Programms hinaus dauerhaft gespeichert zu bleiben, beispielsweise in Datenbanken oder Dateien. Sie stellt sicher, dass Informationen auch nach einem Neustart des Systems oder Programms weiterhin verfügbar sind.
Die eigentliche Installation
So, alle Vorbereitungen sind getroffen und wir installieren nun Portainer in einem Docker-Container. Dafür stellt uns Portainer den folgenden schönen Befehl zur Verfügung:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Was macht dieser Befehl nun im Detail?
Teil des Befehls | Bedeutung |
---|---|
docker run | Der Ausführungsbefehl, dass man einen Docker-Container starten möchte |
-d | “detached” -> Der Container soll im Hintergrund laufen |
-p 8000:8000 | Portmapping: Der lokale Port 8000 soll zum Containerport 8000 weiterleiten |
-p 9443:9443 | Portmapping: Der Container soll mit Port 943 auf dem lokalen Port 943 des Docker-Hosts lauschen |
–name portainer | Der Name des Containers: “portainer” |
–restart=always | Der Container soll (z.B. bei einem Neustart des Systems) immer wieder neu gestartet werden |
-v /var/run/docker.sock:/var/run/docker.sock | Mit “-v” werden z.B. Volumes des Hostsystems in den Docker-Container gemountet. Hier wird der Socket des Docker-Services (also Docker) in den Portainer-Container gemountet. Nur so kann Portainer Docker verwalten. |
-v portainer_data:/data | Das soeben erstelle docker-volume “portainer_data” wird in den Container gemountet. Dort ist es dann unter “data” gemountet. So können die Daten und Einstellungen von Portainer persistent gespeichert werden |
portainer/portainer-ce:latest | Das Image, das im Container gestartet werden soll. Hier: Portainer-ce in der jeweils aktuellsten Version. |
Optional: Überprüfen, ob der Container läuft
Der Docker-Container mit Portainer sollte nun laufen. Wer hier noch einmal ganz sichergehen will, der kann mit folgendem Befehl schauen, ob der Container läuft:
docker ps -a
Die Ausgabe sollte dann ungefähr wie folgt aussehen:
Schritt 3: Einrichtung im Browser
Jetzt läuft der Docker-Container und damit Portainer und wir können die weitere Einrichtung direkt über den Browser vornehmen.
Dafür rufen wir die folgende URL auf:
https://IP:9443/
Wir richten nun einen Admin-Account ein und zack, sind wir schon mitten in Portainer!
Tipp: Die Einrichtung muss aus Sicherheitsgründen (weil wir hier den Admin-Zugang usw. festlegen) zeitnah zum Start des Containers erfolgen.
Schritt 4: Die Docker-Environment
Wir sehen, dass hier nun bereits eine Environment für Docker angelegt worden ist. Das coole ist: Eine Portainer-Instanz kann gleich mehrere Environments verwalten – egal ob Docker oder beispielsweise Kubernetes.
Schritt 5: Container erstellen
Container können nun ganz einfach über Portainer direkt oder mittels Docker-Compose-Files erstellt werden. Ich empfehle die Nutzung der sog. “Stacks”.
Ein Stack ist dabei quasi eine Funktionseinheit (und im Prinzip Analog zu einem Docker-Compose-File), die aus mehreren Containern, die beispielsweise miteinander verknüpft sind, besteht.
Updaten/Upgraden von Portainer
Wie bei jedem Stück Software, ist es auch bei Portainer wichtig, regelmäßig Updates einzuspielen um auf dem aktuellen und sicheren Stand zu bleiben. Das ist, da Portainer ja als eigener Docker-Container läuft, einfacher, als man denkt:
Schritt A) Portainer stoppen
Mit folgendem Befehl stoppen wir den Docker-Container von Portainer:
docker stop portainer
Schritt B) Portainer Container löschen
Jetzt stellen sich die Nackenhaare auf, aber ja, wir löschen mit folgendem Befehl einfach den Docker-Container, in dem sich Portainer befindet:
docker rm portainer
Und keine Angst, die Konfiguration und Co bleiben natürlich erhalten, da wir diese in unserem portainer_data Verzeichnis persistiert haben 😉
Schritt C) Portainer Container recreaten
Jetzt erstellen wir den Portainer-Container einfach mit dem gleichen Befehl neu, wie der, mit dem wir ihn installiert haben. Dadurch wird wieder das persistente docker-volume “portainer_data” gemountet, sodass alle unsere Einstellungen wieder da sind. Der Container wird aber mit dem aktuellen und neuesten “lastest”-Image von Portainer gebaut.
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Der Prozess im Video
Der ganze Prozess der Installation ist hier noch einmal wirklich Klasse in einem Video durchgespielt:
Schreibe eine Antwort