Skip to content

Docker - Portainer

Linux
  • 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

  • Wichtige Links

    Angeheftet Ansible
    1
    0 Stimmen
    1 Beiträge
    60 Aufrufe
    Niemand hat geantwortet
  • Docker & Redis Datenbank

    Verschoben Linux
    2
    0 Stimmen
    2 Beiträge
    149 Aufrufe
    FrankMF

    @FrankM sagte in Docker & Redis Datenbank:

    save 60 1
    #save 900 1
    save 300 10
    save 60 10000

    Hier kann man auch noch schön sehen, wie ich gekämpft habe, bis ich mal eine dump.rdb gesehen habe. Auch irgendwie logisch, das ich nie eine gesehen hatte, wenn man weiß das

    save 900 1

    bedeutet, das er alle 900 Sekunden speichert, wenn mindestens eine Änderung vorhanden ist. Das kann dann schon was dauern. Ich habe das dann mal verkürzt, damit ich schneller ein Ergebnis habe.

    save 60 1

    Das brachte mich dann dem Ziel näher. Danach konnte ich die dump.rdb auch finden.

    Bitte keine Redis DB ohne Passwort laufen lassen!
  • Pycharm & Docker

    Verschoben Linux
    1
    0 Stimmen
    1 Beiträge
    92 Aufrufe
    Niemand hat geantwortet
  • Portainer - Python3.10

    Linux
    1
    0 Stimmen
    1 Beiträge
    53 Aufrufe
    Niemand hat geantwortet
  • NanoPi R4S - Armbian

    NanoPi R4S
    2
    0 Stimmen
    2 Beiträge
    304 Aufrufe
    FrankMF

    Müsste seit gestern so weit sein 🙂

    b20f93d2-1719-40c5-afb8-6b4edafa6793-image.png

  • 0 Stimmen
    1 Beiträge
    222 Aufrufe
    Niemand hat geantwortet
  • Upgrade auf NodeBB 1.11.0

    NodeBB
    1
    0 Stimmen
    1 Beiträge
    362 Aufrufe
    Niemand hat geantwortet
  • Liste von Linuxbefehlen

    Angeheftet Linux
    3
    0 Stimmen
    3 Beiträge
    631 Aufrufe
    FrankMF
    systemd Anzeige der geladenen Dienste root@host:/etc/systemd/system# systemctl --type=service UNIT LOAD ACTIVE SUB DESCRIPTION atd.service loaded active running Deferred execution scheduler blk-availability.service loaded active exited Availability of block devices cloud-config.service loaded active exited Apply the settings specified in cloud-config cloud-final.service loaded active exited Execute cloud user/final scripts cloud-init-local.service loaded active exited Initial cloud-init job (pre-networking) cloud-init.service loaded active exited Initial cloud-init job (metadata service crawler) console-setup.service loaded active exited Set console font and keymap cron.service loaded active running Regular background program processing daemon crowdsec-firewall-bouncer.service loaded active running The firewall bouncer for CrowdSec crowdsec.service loaded active running Crowdsec agent dbus.service loaded active running D-Bus System Message Bus getty@tty1.service loaded active running Getty on tty1 ifupdown-pre.service loaded active exited Helper to synchronize boot up for ifupdown keyboard-setup.service loaded active exited Set the console keyboard layout kmod-static-nodes.service loaded active exited Create List of Static Device Nodes lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling mariadb.service loaded active running MariaDB 10.11.3 database server networking.service loaded active exited Raise network interfaces nginx.service loaded active running A high performance web server and a reverse proxy server qemu-guest-agent.service loaded active running QEMU Guest Agent resolvconf.service loaded active exited Nameserver information manager semaphore.service loaded active running Ansible Semaphore serial-getty@ttyS0.service loaded active running Serial Getty on ttyS0 ssh.service loaded active running OpenBSD Secure Shell server systemd-binfmt.service loaded active exited Set Up Additional Binary Formats systemd-fsck@dev-disk-by\x2duuid-1E22\x2dDC00.service loaded active exited File System Check on /dev/disk/by-uuid/1E22-DC00 systemd-journal-flush.service loaded active exited Flush Journal to Persistent Storage systemd-journald.service loaded active running Journal Service systemd-logind.service loaded active running User Login Management systemd-modules-load.service loaded active exited Load Kernel Modules systemd-random-seed.service loaded active exited Load/Save Random Seed systemd-remount-fs.service loaded active exited Remount Root and Kernel File Systems systemd-sysctl.service loaded active exited Apply Kernel Variables systemd-sysusers.service loaded active exited Create System Users systemd-timesyncd.service loaded active running Network Time Synchronization systemd-tmpfiles-setup-dev.service loaded active exited Create Static Device Nodes in /dev systemd-tmpfiles-setup.service loaded active exited Create Volatile Files and Directories systemd-udev-trigger.service loaded active exited Coldplug All udev Devices systemd-udevd.service loaded active running Rule-based Manager for Device Events and Files systemd-update-utmp.service loaded active exited Record System Boot/Shutdown in UTMP systemd-user-sessions.service loaded active exited Permit User Sessions ufw.service loaded active exited Uncomplicated firewall user-runtime-dir@0.service loaded active exited User Runtime Directory /run/user/0 user@0.service loaded active running User Manager for UID 0 LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 44 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.