Skip to content

Docker - Portainer

Linux
3 1 860
  • Meine Aktivitäten mit Docker Containern, sind bis heute recht übersichtlich. Da wären

    Im ersten Link habe ich mich mit einer Dockerinstallation auf einem ROCKPro64 beschäftigt. Im zweiten Link habe ich aufgeschrieben, wie ich eine Dockerinstallation von checkmk auf meinem Haupt-PC aufgesetzt habe usw. Das nutze ich bis heute so, zur Überwachung meiner Server.

    Jetzt war ja letztes Wochenende wieder Chemnitzer Linux Tage (CLT), leider nur online 😞 Ein Wochenende wo ich einigen Vorträgen gelauscht habe und mich auch wieder etwas intensiver mit Open Source Programmen beschäftigt habe. Es ist immer wieder spannend, was es alles so gibt....

    Beim Stöbern und Ausprobieren, bin ich über das Tool Portainer gestolpert. Portainer ist eine Webanwendung um die Dockercontainer zu administrieren.

    Installation

    docker volume create portainer_data
    docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
    

    Quelle: https://documentation.portainer.io/v2.0/deploy/ceinstalldocker/

    Wir erzeugen einen dauerhaften Speicherort (Volumes) portainer_data
    Danach starten wir den Docker Container. Es werden zwei Ports zugewiesen. Dazu folgendes.

    By default, Portainer will expose the UI over the port 9000 and expose a TCP tunnel server over the port 8000. The latter is optional and is only required if you plan to use the Edge compute features with Edge agents.

    Ok, wir finden das UI auf dem Port 9000

    Webinterface

    http://192.168.3.213:9000/#!/home
    

    bf8b2260-1d1f-4685-8e9d-ea7fd40fe7b1-image.png

    Hier sieht man die Übersicht. Einmal meinen Haupt-PC und einen ROCKPro64 auf dem Docker läuft. Wie man den ROCKPro64 einbindet erläutere ich später.

    Übersicht der Container, die auf dem Haupt-PC vorhanden sind und der Status usw.

    7615e2cb-062e-437f-b1a0-833112f02113-image.png

    Was man alles mit Portainer machen kann, findet man in der Doku.

    Endpoint

    Was ich gelernt habe und extrem spannend finde ist, das man auch entfernte Rechner ganz einfach einbinden kann und dann dort die Docker Container installiert, startet, stopped usw.

    Installation auf dem Endpoint (Server)

    Auf dem entfernten Rechner, muss ein Agent installiert werden. Das ist auch einfach nur ein Docker Container.

    docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent
    

    Im Webinterface des steuernden Rechners, erstellt man dann einen Endpoint.

    7d358bbd-da25-4d54-ba48-b476329689bb-image.png

    Nun kann man aus dem Webinterface heraus mit den Docker Containern spielen 🙂

    f6ee69ae-9249-4ceb-9b0a-8f6b78b610fb-image.png

    Wir starten mal den Nginx Server.

    46502e47-293f-4de7-ada2-94a84d708950-image.png

    Der Nginx Server läuft auf dem Port 49156. Das ist im Container alles einstellbar.

    123570bc-bf33-49fd-9c6f-975d497a9e7b-image.png

    Ich arbeite gerne auf der Konsole, aber das ist eine echte Erleichterung da ich im Docker Universum nicht so bewandert bin. Hier kann man schnell mal was ändern und ausprobieren usw. Viel kaputt machen kann man eigentlich auch nicht. Tolle Sache um mal schnell was auszuprobieren.

    Und ein Projekt habe ich schon im Kopf, was ich evt. auch mal produktiv einsetzen werden, vermutlich am Anfang aber nur als Testsystem. Dazu soll mir dann ein Server in der Hetzner Cloud dienen, aber dazu wird es dann sicherlich einen neuen Beitrag geben.

    Was fehlt hier? Das Thema

    Sicherheit

    Container sind für mich Neuland. Man sollte sich zu dem Thema einlesen. Das das Webinterface über TLS laufen muss, muss ich hier nicht erwähnen. Bei mir lokal ist das nicht das große Problem, im Internet aber mit Sicherheit! Das die Kommunikation zum Agent abgesichert werden muss, sollte auch klar sein. Mir fällt dazu ein Wireguard Tunnel ein!?

    Die Container Sicherheit ist auch ein sehr breites Thema. Auch dazu muss man sich mit Sicherheit intensiv beschäftigen, bevor man einen Server mit Docker ans Netz hängt!

  • Nachdem ich jetzt ein wenig gespielt habe, bin ich über die Funktion Stacks gestolpert. Heißt auf deutsch Stapel. Ok, dann probieren wir das mal.

    Voraussetzung

    Für Stacks braucht man das Tool docker-compose

    apt install docker-compose
    

    Danach kann man die Stapel deployen.

    Textdatei erstellen

    Für das Deployen braucht man eine Textdatei namens docker-compose.yml Der Portainer nimmt uns das ab, und macht ein Edit-Fenster auf, wo wir den Text einfügen können.

    compose.png

    In diesem Beispiel erstellen wir zwei Container.

    • mariadb
    • adminer

    Ich denke, wer so was schon mal konventionell installiert hat, weiß worum es geht. Den Stack kann man dann deployen. Dann werden diese Container installiert und gestartet.

    Kontrolle

    adminer.png

    Ich kann mich noch gut dran erinnern, wie ich einen Adminer auf einem Server installiert habe. Das hat was länger gedauert 😉 Hier klick, fertig.

    Migrate / Duplicate

    Und jetzt wird es spannend 😁

    fb5a8a8f-7ffd-4468-bb54-0bf667c61504-image.png

    Man kann den erstellten Stack ganz einfach migrieren. Dazu wähle ich den vorhanden Stack aus, wähle einen Endpoint und klicke auf Migrate und das wird alles auf dem Endpoint installiert und gestartet. Dauerhaft abgelegte Daten ziehen nicht mit um, wenn ich das richtig verstanden habe. Da muss man sich selber drum kümmern.

    Erkenntnisse

    Man kann so einen Stack ganz bequem lokal konfigurieren und schiebt das ganze dann einfach auf den produktiven Server, Mir dämmert so langsam, was man damit richtig gut anstellen kann. Ein ganz spannendes Thema, was mich vermutlich noch viele Stunden meiner Freizeit kosten wird. Zum Glück habe ich da immer sehr viel Spaß bei. Ok, ich bin ehrlich, wenn was nicht geht kann einen das auch schon mal ärgern. Das kommt aber die letzten Jahre immer seltener vor 😉

    Sicherheit

    Bitte beachten, ich betrachte zum jetzigen Zeitpunkt nicht unbedingt die Sicherheitsaspekte. Das wächst dann mit der Zeit. Für den produktiven Einsatz habe ich aktuell nichts am laufen. Ich hoffe aber, das das bald der Fall ist. Liest hier zufällig ein Dockerspezialist mit? Gute Lesetipps gesucht!

    • Checkliste Sicherheit Docker Container
    • Worauf muss man achten?
    • Gute Links werden gebraucht..
  • Dann grabe ich das mal wieder aus 😉

    Bedingt durch den Wegfall meines Proxmox, musste ich mir Gedanken darüber machen, wie ein paar Dienste auch weiterhin laufen sollen. Um mal die zwei wichtigsten zu nennen.

    • checkmk
    • DokuWiki

    Diese sollen später, wenn der zweite NanoPi R5S aus China da ist, dort laufen. Da der aber mit der Schneckenpost kommt, kann man ja in der Zwischenzeit mal wieder mit Docker spielen.

    Ich erinnerte mich daran, das checkmk eine sehr gute Anleitung hat, so das ich das mal wieder ausprobierte. Klappte einwandfrei. Dann erinnerte mich an Portainer und dachte mir, das probiere ich mal wieder aus 🙂

    1d2dc9b3-ad71-45c5-b552-72c88a1bf773-grafik.png

    Ich hatte übrigens die Endpoints gesucht und nicht gefunden, die heißen jetzt Environments. Auf dem Bild ist noch keiner eingerichtet.

    4bdbf196-1b36-4e65-94d0-0e56daa473bf-grafik.png

    Irgendwie ist das wirklich richtig gute Software. Ich mag den Portainer und auch als selbst ausgebildeter ITler 😉 kommt man damit sehr schnell ganz gut zurecht.

    Ja, man kann die ganzen Docker Befehle auch über die Konsole eingeben, was ich normalerweise auch mit ganz vielen Dingen mache, aber das macht hier einfach Spaß. Man hat auch schnell einen guten Überblick was wo läuft usw.

    Wer so was sucht, einfach mal ausprobieren. Klare Empfehlung von mir.

  • FrankMF FrankM hat am auf dieses Thema verwiesen
  • 0 Stimmen
    1 Beiträge
    14 Aufrufe
    Niemand hat geantwortet
  • Forgejo Installation mit Podman Quadlet auf Hetzner VM

    Podman forgejo podman quadlet linux
    2
    0 Stimmen
    2 Beiträge
    297 Aufrufe
    FrankMF
    Schauen wir uns mal an, wie man die Container aktuell hält. In der postgres.container steht das hier (als Beispiel) [Container] Image=docker.io/library/postgres:17 AutoUpdate=registry Das AutoUpdate=registry ist die Voraussetzung, dass der Container aktualisiert werden darf. Mit diesem Befehl kann man sich anschauen, wie der Stand der DInge ist. root@debian-4gb-nbg1-2-forgejo:~# podman auto-update --dry-run UNIT CONTAINER IMAGE POLICY UPDATED forgejo-pod.service 6486189fb10c (postgres) docker.io/library/postgres:17 registry false forgejo-pod.service 7d5627e2d434 (forgejo) codeberg.org/forgejo/forgejo:11.0.1 registry false forgejo-pod.service 7fb26d4f8b58 (nginx) docker.io/library/nginx:latest registry false Podman hat aber standardmäßig einen systemd Dienst, der sich darum kümmert root@forgejo:/etc/containers/systemd# systemctl status podman-auto-update.service ○ podman-auto-update.service - Podman auto-update service Loaded: loaded (/usr/lib/systemd/system/podman-auto-update.service; enabled; preset: enabled) Active: inactive (dead) since Mon 2025-06-09 00:02:57 UTC; 12h ago Invocation: a098f0054b254a0888ee789200ac9507 TriggeredBy: ● podman-auto-update.timer Docs: man:podman-auto-update(1) Process: 68939 ExecStart=/usr/bin/podman auto-update (code=exited, status=0/SUCCESS) Process: 68947 ExecStartPost=/usr/bin/podman image prune -f (code=exited, status=0/SUCCESS) Main PID: 68939 (code=exited, status=0/SUCCESS) Mem peak: 14.4M CPU: 292ms Jun 09 00:02:55 forgejo systemd[1]: Starting podman-auto-update.service - Podman auto-update service... Jun 09 00:02:55 forgejo podman[68939]: 2025-06-09 00:02:55.368941 +0000 UTC m=+0.059687227 system auto-update Jun 09 00:02:57 forgejo podman[68939]: UNIT CONTAINER IMAGE POLICY UPDATED Jun 09 00:02:57 forgejo podman[68939]: forgejo-pod.service 6486189fb10c (postgres) docker.io/library/postgres:17 registry false Jun 09 00:02:57 forgejo podman[68939]: forgejo-pod.service 7d5627e2d434 (forgejo) codeberg.org/forgejo/forgejo:11.0.1 registry false Jun 09 00:02:57 forgejo podman[68939]: forgejo-pod.service f2e9eee72017 (nginx) docker.io/library/nginx:latest registry false Jun 09 00:02:57 forgejo systemd[1]: podman-auto-update.service: Deactivated successfully. Jun 09 00:02:57 forgejo systemd[1]: Finished podman-auto-update.service - Podman auto-update service. postgres Ok, die Container sollten automatisch aktualisiert werden. docker.io/library/postgres:17 Die Postgres DB ist auf die Version 17 festgezurrt. Aktuell ist root@forgejo:/etc/containers/systemd# podman exec postgres postgres --version postgres (PostgreSQL) 17.5 (Debian 17.5-1.pgdg120+1) Eine Version 17.6 wird jetzt automatisch installiert, eine Version 18 aber nicht. nginx docker.io/library/nginx:latest NGINX zieht sich also immer die letzte "latest" Version, die zur Verfügung gestellt wird. root@forgejo:/etc/containers/systemd# podman exec nginx nginx -v nginx version: nginx/1.27.5 Gerade mal gecheckt, 1.27.5 ist die letzte Mainline Version. Also sind wir aktuell. forgejo Der Eintrag codeberg.org/forgejo/forgejo:11.0.1 aktuelle Version, die installiert ist. root@forgejo:/etc/containers/systemd# podman exec forgejo forgejo -v Forgejo version 11.0.1+gitea-1.22.0 (release name 11.0.1) built with GNU Make 4.4.1, go1.24.2 : bindata, timetzdata, sqlite, sqlite_unlock_notify Ok, wir sind auf Version 11.0.1 Wenn jetzt die Version 11.0.2 herauskommt, wird diese nicht installiert, da wir im forgejo.container folgendes stehen haben. [Container] Image=codeberg.org/forgejo/forgejo:11.0.1 Das ist aber erst mal nicht so schlimm, ich lese da mit und bekomme das mit. Das mache ich auch lieber von Hand, dann kann ich besser sehen wo es klemmt
  • Restic v0.17.0 released

    Restic restic linux
    1
    0 Stimmen
    1 Beiträge
    182 Aufrufe
    Niemand hat geantwortet
  • Missing npm on debian 12

    NodeBB nodejs npm nodebb linux
    2
    0 Stimmen
    2 Beiträge
    380 Aufrufe
    M
    "curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -" 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash' source ~/.bashrc nvm install node
  • Nextcloud 23.0.3

    Nextcloud nextcloud linux
    1
    0 Stimmen
    1 Beiträge
    193 Aufrufe
    Niemand hat geantwortet
  • GoAccess - Visual Web Log Analyzer

    Verschoben Linux linux goaccess
    1
    1
    0 Stimmen
    1 Beiträge
    179 Aufrufe
    Niemand hat geantwortet
  • VSCodium - Meldungen trailing-whitespaces

    Linux vscodium vscode linux
    1
    3
    0 Stimmen
    1 Beiträge
    155 Aufrufe
    Niemand hat geantwortet
  • Debian Buster 10 Release

    Linux linux nvidia
    3
    1
    0 Stimmen
    3 Beiträge
    490 Aufrufe
    FrankMF
    Da man ja beim Login auswählen kann, mit was die Session startet, war ich doch jetzt etwas neugierig was überhaupt läuft. [image: 1562484643462-img_20190707_092217.jpg] frank@debian:~$ echo $WAYLAND_DISPLAY frank@debian:~$ loginctl SESSION UID USER SEAT TTY 7 1000 frank seat0 tty2 c1 116 Debian-gdm seat0 tty1 2 sessions listed. frank@debian:~$ loginctl show-session c1 -p Type Type=x11 frank@debian:~$ loginctl show-session c1 Id=c1 User=116 Name=Debian-gdm Timestamp=Sat 2019-07-06 22:43:34 CEST TimestampMonotonic=30094837 VTNr=1 Seat=seat0 TTY=tty1 Remote=no Service=gdm-launch-environment Scope=session-c1.scope Leader=1015 Audit=4294967295 Type=x11 Class=greeter Active=no State=online IdleHint=yes IdleSinceHint=1562446130937731 IdleSinceHintMonotonic=346278596 LockedHint=yes Die Installation der Nvidia Treiber macht da wohl einen x11 Desktop raus. Aber auch nicht weiter schlimm, der Wayland lief ja hier überhaupt nicht. Würde mich aber über interessante Links zum Thema freuen