No description
Find a file
2025-10-29 18:31:09 +01:00
ansible tool-installation 2025-10-29 16:26:30 +01:00
prompts initial commit 2025-10-25 13:28:36 +00:00
scripts Reset Skript added 2025-10-29 18:31:09 +01:00
webroot weitere Seite 2025-10-25 18:35:36 +02:00
AGENTS.md ansible und docker scripte 2025-10-25 17:19:14 +02:00
README.md aktualisierung 2025-10-29 18:05:55 +01:00

Docker-Fobi Begleitmaterial

Schulungsumgebung

Jeder Teilnehmer hat am Schulungstag einen Cloud-Server zur Verfügung:

  • 2 Kerne
  • 4GB RAM
  • 80GB SSD
  • debian13 Grundinstallation

Die Server haben jeweils einen Wildcard-DNS-Record gesetzt, so dass sie unter beliebigen Namen in ihrem Bereich aufgerufen werden können. Die Basis-Adressen folgen dem Schema fobiX.benbex.de, wobei X die Teilnehmernummer ist:

Teilnehmer 1 -> fobi1.benbex.de
Teilnehmer 2 -> fobi2.benbex.de

Damit sind dann auf dem Server fobiX.benbex.de die Dienste zum Beispiel so zu unterscheiden:

  • Webserver: webserver.fobiX.benbex.de
  • Nextcloud: nextcloud.fobiX.benbex.de
  • irgendwas anderes: wurschdsalat.fobiX.benbex.de

Vorbereitungen

Damit ein vernünftiges Arbeiten mit dem Server möglich ist, benötigst du einen SSH-Client: Linux / MacOS / Windows11: integriert ins System. Öffne ein Terminal (bei Windows cmd) und gib ein:

ssh fobiX.benbex.de -l root

das -l steht für "Login Name" und 'root' ist der administrative Nutzer bei Linux. (das X ersetzt du durch deine Nummer 1-6)

Windows10 vor Version 1809: Du benötigst ein Zusatzprogramm, z.B. putty.exe

Bei der ersten Verbindung erhältst du eine Warnung:

The authenticity of host 'fobiX.benbex.de (<IP-Adresse>)' can't be established.
ED25519 key fingerprint is SHA256:u5Fb2WImIBh5e/FoRCzgK2uxTpL06o93XiPa+AroL+4.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

Diese Warnung ist unter normalen Bedingungen wirklich ernst zu nehmen! Ein Server, den man schon kennt, darf diese Meldung NIE verursachen. Hier merkt man, wenn ein Bösewicht sich eingeklinkt hat. In unserem Fall ist die aber normal und der Aufwand, den Fingerabdruck des Servers zu verifizieren ist für den geplanten Zweck zu aufwändig, so dass wir hier in naivem Vertrauen yes eintippen (bzw. anklicken, falls unter Windows mit putty) Nachdem du dich mit dem Passwort (steht in den geteilten Notizen im BigBlueButton) authentifiziert hast, begrüßt dich nun der Server mit der "message of the day (motd)" und anschließend mit dem System-Prompt:

Linux fobiX 6.12.41+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.41-1 (2025-08-12) x86_64
(...)
root@fobiX:~# 

Am Prompt (root@fobiX:~# ) kannst du schon einiges sehen:

  • root dein aktuell aktiver Nutzername
  • fobiX der Hostname des Servers, an dem du angemeldet bist
  • ~ du befindest dich gerade in deinem Homeverzeichnis
  • # du besitzt root-Rechte (bei nicht privillegierten Nutzern steht da $)

Erste Schritte

  1. Nachdem verteilt wurde, wer welchen Server bekommt, solltest du den Server auf den neuesten Update-Stand bringen, damit wir alle die selben Voraussetzungen vorfinden.
  • Paketquellen aktualisieren:
root@fobiX:~# apt update
  • Alle Updates ohne erneute Rückfrage installieren:
root@fobiX:~# apt -y upgrade

Dieser Vorgang dauert je nach verfügbaren updates auch mal länger. Bei unseren frischen Server etwa 30 Sekunden.

  1. Um dieses Git-Repo auf dem Server verwenden zu können, benötigst du das Programm-Paket git, welches du mit einem einfachen Befehl installieren kannst:
root@fobiX:~# apt -y install git
  1. Mit git bist du jetzt in der Lage, das komplette Repo auf deinen Server zu clonen. Die Adresse musst du nicht von Hand abtippen (darfst du aber), die kannst du oben im Repo mit einem Mausklick bequem in die Zwischenablage kopieren.
root@fobiX:~# git clone https://git.az-it.net/az/docker-fobi.git

danach wechselst du mit cd d<TAB><ENTER> in das heruntergeladene Verzeichnis. d bedeutet: Du tippst den Buchstaben "d" und drückst dann die <TAB>-Taste. Dadurch wird der Rest des Kommandos automatisch vervollständigt, was Tippfehler verhindert und Zeit spart.

Damit hast du jetzt Zugriff auf die Dateien aus dem Repo direkt auf dem Server.

Bash-Skripte im Verzeichnis "scripts"

um verschiedene Vorgänge zu beschleunigen, habe ich die Befehlsabfolgen in Bash-Skripte verpackt. Das hat den Vorteil, dass man die Befehle dann nicht mehr einzeln von Hand eingeben muss, sondern durch den simplen Aufruf des Skriptes automatisch laufen lassen kann. Das läuft dann immer gleich ab. Beispiel 1: führe das Skript 00-Beispiel1.sh aus, indem du

root@fobiX:~# bash scripts/00-Beispiel1.sh

ausführst. Tippe dabei nicht unnötig viel von Hand, sondern verwende oft die -Taste. hier z.B. bash sc<TAB>00<TAB>

Übersichtlicheren Systemprompt setzen

Im Verzeichnis prompts sind verschiedene Systemprompt-Definitionen gespeichert. Um das Terminal etwas zu verschönern (und übersichtlicher zu machen) setze den Systemprompt durch Eingabe von

. prompts/mit_datum_und_returncode

(vergiss auch hier die <TAB>-Taste nicht...)

Docker-Host vorbereiten

der Server benötigt einige Pakete, damit er seinen Dienst als Docker-Host antreten kann. Zusätzliche Pakete sind nötig, damit die Hilfs-Scripte ordnungsgemäß laufen können.

Von Hand würde man jetzt die offizielle Docker.com Anleitung "Install Docker Engine on Debian" durchspielen. Einfacher geht es, wenn schon jemand™ ein "ansible-playbook" hergestellt hat. Zufälligerweise liegt hier eins im Repo. Ein Ansible-Playbook ist eine Datei, die für das Open-Source-Automatisierungs-Tool ansible einen Zustand eines Servers beschreibt. Ansible kümmert sich dann darum, diesen Zustand herzustellen.

Um dieses Playbook zu verwenden benötigt man natürlich "ansible".

ansible installieren und anschließend direkt alles aus "Install Docker Engine on Debian" automatisch durchführen kannst du mit dem Skript 01-install-ansible-and-run-playbook.sh. Wie gerade schon geübt machst du das mit dem Befehl

root@fobiX:~# bash scripts/01<TAB><ENTER>

einen Wimpernschlag später (oder 100...) ist docker auf dem Server fertig eingerichtet.

Test, ob alles geklappt hat

Version prüfen

Wenn du docker version eintippst, sollte die Ausgabe in etwa so aussehen:

# docker version
Client: Docker Engine - Community
 Version:           28.5.1
 API version:       1.51
 Go version:        go1.24.8
 Git commit:        e180ab8
 Built:             Wed Oct  8 12:17:24 2025
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          28.5.1
  API version:      1.51 (minimum version 1.24)
  Go version:       go1.24.8
  Git commit:       f8215cc
  Built:            Wed Oct  8 12:17:24 2025
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.28
  GitCommit:        b98a3aace656320842a23f4a392a33f46af97866
 runc:
  Version:          1.3.0
  GitCommit:        v1.3.0-0-g4ca628d1
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

einen Container starten:

Weil sich hello world als Tradition etabliert hat, wollen auch wir unseren ersten Container in dieser Tradition starten:

root@fobiX:~# docker run hello-world

Wenn hier sinnvoller output kommt, dann

  • ist docker korrekt installiert
  • kann der docker-Dienst auf die Docker-Registry zugreifen und dort automatisch nach Images suchen und sie herunterladen.
  • hat der Container seine Aufgabe erfüllt und sich beendet.

Jetzt rufst du diesen Befehl noch zwei drei mal auf, damit wir gleich beim nächsten Schritt was zu sehen haben :)

laufende Container auflisten

docker ps listet die laufenden Container auf:

root@fobiX:~# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@fobiX:~# 

wie du siehts, siehst du nix. Klar, es läuft ja kein Container mehr :)

erweitere den Befehl mit dem Parameter -a ("bedeutet all")

# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
7bb05fa9feff   hello-world   "/hello"   4 minutes ago   Exited (0) 7 minutes ago             beautiful_elion
dcb9ee2e3a89   hello-world   "/hello"   4 minutes ago   Exited (0) 4 minutes ago             adoring_snyder
4b350e1e7f74   hello-world   "/hello"   4 minutes ago   Exited (0) 4 minutes ago             kind_brattain
root@fobiX:~# 

Damit siehst du auch die ganzen Container, die zwar erstellt wurden, aber nicht mehr laufen. Diesen Datenmüll wollen wir gerne entfernen:

  • einzeln: docker rm 7bb0 entfernt den Container, dessen CONTAINER ID mit 7bb0 anfängt.
  • mehrere: docker container prune entfernt alle Container, die nicht mehr laufen.
root@fobiX:~# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
7bb05fa9feffa5ea28a08c715983e1d7be75289296fa75486043fa32ffe43eab
dcb9ee2e3a895803c24796bdf68aa2dea7e1fc6131ffd76194dd522d01ec427b
4b350e1e7f74eccffc220174e8b16d3e8ceac890b826dcb9b817324c9ef8bba3

Um gar nicht erst alte Container herumliegen zu lassen kann man den Container mit dem Parameter --rm ("remove") starten. Dann wird er nach dem Stoppen direkt gelöscht:

root@fobiX:~# docker run --rm hello-world

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/

root@fobiX:~# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@fobiX:~#