1. Was ist Docker?
-
Eine Technologie, um eine Applikation und alle ihre Abhängigkeiten in einen einzelnen Container zu packen.
-
es können mehrere Container auf einem Hostsystem laufen, die sich nicht beeinflussen. So ist es zB möglich mehrere Versionen einer Applikation (zB eine Datenbank) parallel zu betreiben.
-
Wird eine Applikation in einen Docker-Container gepackt, so ist sichergestellt, dass die Laufzeitumgebung unverändert bleibt, auch wenn der Container auf einem anderen Hostsystem läuft.
3. Leichtgewichtige Virtualisierung

-
Bsp. für "schwergewichtige" Virtualisierung
-
VirtualBox
-
vmWare
-
…
-
-
Bsp. für leichtgewichtige Virtualisierung
-
Docker
-
Podman
-
…
-
4. Images und Container
-
Image: Immutable Image - die Files könnnen nicht verändert werden.
-
Container: Ein Prozess, der auf dem Image basiert. Natürlich möchte der Container Files im Image verändern können. Daher werden die veränderten Files in einem sogenannten Writable Layer (hier rosa) gespeichert. Daher ist ein Container nicht nur ein Prozess, sondern beinhaltet auch Files.
-
Ports: Container können Ports freigeben, um mit der Außenwelt zu kommunizieren.
-
Volumes: Container können Volumes mounten, um Daten persistent zu speichern.
-
Dockerfile: Kochrezept zum Erstellen des Images
4.1. Übung - Ist Docker installiert?
docker version
% docker version Client: Version: 29.1.3 API version: 1.52 Go version: go1.25.5 Git commit: f52814d Built: Fri Dec 12 14:48:46 2025 OS/Arch: darwin/arm64 Context: desktop-linux Server: Docker Desktop 4.57.0 (215387) Engine: Version: 29.1.3 API version: 1.52 (minimum version 1.44) Go version: go1.25.5 Git commit: fbf3ed2 Built: Fri Dec 12 14:50:40 2025 OS/Arch: linux/arm64 Experimental: false containerd: Version: v2.2.1 GitCommit: dea7da592f5d1d2b7755e3a161be07f43fad8f75 runc: Version: 1.3.4 GitCommit: v1.3.4-0-gd6d73eb8 docker-init: Version: 0.19.0 GitCommit: de40ad0
sudo usermod -a -G docker jenkins
5. Docker Registries
-
Woher kommen nun die Images, die für den Betrieb der Container gebraucht werden?
-
Entweder bauen wir die Images selbst mit einem Dockerfile (etwas später mehr dazu)
-
Oder wir laden die Images aus einer Docker Registry herunter
-
-
Docker Registry:
-
a remote repository for storing Docker images
-
public or private
-
self-hosted or third-party service
-
ie Docker Hub, Quay.io
-

5.1. Übung Docker Cowsay
docker run --rm ubuntu:24.04 sh -c " apt-get update -y && apt-get install -y cowsay && export PATH=\$PATH:/usr/games && cowsay 'Hello 4xhif'"
-
-c … Befehl der in der Shell ausgeführt wird.
5.3. Übung: Image alpine interaktiv
docker run -it alpine /bin/sh
-
-it → interaktives Terminal
oder
docker run -it ubuntu:24.04 /bin/bash
-
Mit der Option
--rmwird der Container nach dem Beenden automatisch gelöscht.
5.4. Wichtige Docker-Kommandos:
-
docker pull <image>: Lädt ein Image aus einer Registry herunter -
docker image ls: Listet alle lokal verfügbaren Images auf (früherdocker images) -
docker container ls: Listet alle laufenden Container auf (früherdocker ps) -
docker container ls -a: Listet alle Container auf, auch die gestoppten -
docker run <image>: Startet einen Container basierend auf dem angegebenen Image -
docker exec -it <container> <command>: Führt einen Befehl in einem laufenden Container aus -
docker stop <container>: Stoppt einen laufenden Container -
docker rm <container>: Löscht einen gestoppten Container -
docker rmi <image>: Löscht ein Image vom lokalen System
6. Bind Mounts and Volumes
-
Bind Mounts ein File oder Verzeichnis des Containers wird in einem File oder Verzeichnis am Host zugänglich gemacht
-
docker run -v ${PWD}/directory-on-host:/directory-in-container
-
-
(Named) Volumes existieren am Host. Sie werden durch die Docker CLI manipuliert.
-
docker volume create my-volume -
docker run -v my-volume:/directory-in-container
-
-
Volumes verfügen über mehr Features wie Cloud Storage Backends beim Einsatz in der Cloud (k8s).
6.1. Übung: Ubuntu mit einem Volume
docker run -it --name syp_ubuntu -v my-opt:/opt ubuntu:24.04 /bin/bash
docker volume ls
6.2. Übung: Ubuntu mit einem bind mount
docker run -it --name syp_ubuntu -v ${PWD}/my_opt:/opt ubuntu:24.04 /bin/bash
ls -lah ./my_opt
6.3. Übung: Ubuntu mit einem Volume
# ist nicht notwendig, wird automatisch erstellt docker volume create my_volume docker run -it --name syp_ubuntu -v my_volume:/opt ubuntu:24.04 /bin/bash
-
erstelle ein file im opt-folder:
echo 123 > my-file.txt -
beende container
-
lösche container
-
erstelle und starte einen neuen Container → das File befindet sich immer noch im Volume
7. Ports
-
In einem Container laufen meist Dienste, wie zB Webserver oder Datenbanken.
-
Diese Dienste müssen über das Netzwerk erreichbar sein.
-
Container sind per default von außen nicht erreichbar.
-
Um einen Dienst im Container erreichbar zu machen, müssen Ports freigegeben werden.
7.2. Übung: nginx - Step 2
docker run --rm -p 8081:80 --name nginx nginx
docker exec -it nginx /bin/sh
7.3. Übung: nginx - Step 3
docker run --rm -v ${PWD}/data:/usr/share/nginx/html -p 8081:80 --name nginx nginx


7.4. Übung: PostgreSQL
docker run -it \
--rm=true \
--name postgres \
-v ${PWD}/pgdata:/var/lib/postgresql/data \
-e POSTGRES_USER=app \
-e POSTGRES_PASSWORD=app \
-e POSTGRES_DB=db \
-p 5432:5432 postgres:18.1
8. Unterschied zum Arbeiten ohne Docker
-
Ohne Docker werden auf einer Maschine mehrere Softwareprodukte installiert
-
Bei Verwendung von Docker wird für jedes Softwareprodukt ein eigener Docker-Container erstellt
9. Docker Networks
-
Konfiguriert die Verbindung zwischen Container und zum Internet
-
Container können ports freigeben und so im Internet verfügbar machen
-
Man verwendet die Docker CLI
-
Network Drivers
-
Bridge: Virtuelles Netzwerk, um mehrere Container miteinander zu verbinden
-
Host: Entfernt die Netzwerk-Isolation zwischen Host und Containern. Die Container benutzen das Netzwerk des Hosts direkt
-
Overlay: Verbindet Container die auf unterschiedlichen Docker-Hosts laufen
-
Macvlan: Weist eine MAC-Adresse einem Container zu. Für low-level Netzwerkanforderungen
-
None: Deaktiviert das Netzwerk zwischen den Containern
-

