linux-ubuntu-debian container docker setup infrastructure

Docker Engine: Installation & Setup (Artikel 037)

Professionelle Installation der Docker Engine unter Ubuntu und Debian. Konfiguration des Docker-Dämons, Benutzerrechte-Management und erste Schritte mit Containern.

# Docker Engine: Container-Infrastruktur richtig aufsetzen

TL;DR / Management Summary Docker hat die Art und Weise, wie Applikationen bereitgestellt werden, revolutioniert. Während ein apt install docker.io schnell geht, setzen Enterprise-Umgebungen auf das offizielle Repository von Docker (CE), um immer die neuesten Security-Patches und Features zu erhalten. Wir zeigen, wie man Docker sauber installiert, den Dämon härtet und den Zugriff für Benutzer ohne sudo sicher konfiguriert.


# 1. Einführung & Architektur

Der Container-Stack.

Docker ist eine Client-Server Applikation. Der Docker-Dämon (dockerd) verwaltet die Container auf dem Kernel, während das CLI (docker) die Befehle sendet.

graph TD
    A[Docker CLI] -->|Unix Socket / REST API| B[Docker Daemon dockerd]
    B --> C[Images local cache]
    B --> D[Containers runtime]
    B --> E[Network Bridge docker0]
    B --> F[Volumes]
    G[Registry: Docker Hub / Harbor] -->|Pull| B

# 2. Installation: Der saubere Weg

Offizielle Repositories nutzen.

# Schritt 1: Alte Versionen entfernen

sudo apt remove docker docker-engine docker.io containerd runc

# Schritt 2: Docker Repository hinzufügen

# GPG Key hinzufügen
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Repository verlinken (Beispiel Ubuntu Jammy)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Schritt 3: Docker Engine installieren

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 3. Post-Installation: Best Practices

Konfiguration und Rechte.

# Docker ohne Sudo (optional aber üblich)

Vorsicht: Wer in der Gruppe docker ist, hat de facto Root-Rechte auf dem System!

sudo usermod -aG docker $USER
# Danach einmal ab- und anmelden

# Dämon Tuning (/etc/docker/daemon.json)

Konfigurieren Sie Log-Rotation, um volle Disks zu vermeiden:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "default-address-pools": [
    {"base":"172.17.0.0/16","size":24}
  ]
}

Danach: sudo systemctl restart docker.


# 4. Day-2 Operations: Lifecycle Management

Aufräumen und Überwachen.

# Container und Images löschen

# Entfernt alles Unbenutzte (Images, Container, Networks)
docker system prune -a

# Nur unbenutzte Volumes löschen (Vorsicht: Datenverlust!)
docker volume prune

# Logs einsehen

docker logs -f <container_id_oder_name>

# 5. Troubleshooting & “War Stories”

Wenn der Wal nicht schwimmt.

# Story 1: “Der DNS-Fail im Container”

Symptom: Ein Container kann keine Server im Internet erreichen, aber der Host-Server schon. Ursache: Docker nutzt standardmäßig die DNS-Einstellungen des Hosts. Wenn der Host nur 127.0.0.53 (systemd-resolved) nutzt, kann Docker diesen Socket nicht im Container nutzen. Lösung: Definieren Sie feste DNS-Server in der daemon.json oder übergeben Sie --dns 8.8.8.8 beim Start.

# Story 2: “Mount-Point blockiert System-Start”

Symptom: Der Docker-Dämon startet nicht, weil /var/lib/docker (eine eigene Partition) noch nicht gemountet ist. Ursache: Race-Condition zwischen Systemd-Mount und Docker-Start. Lösung: Nutzen Sie x-systemd.requires in der /etc/fstab für den Mountpoint, damit Docker auf die Partition wartet.


# 6. Sicherheit & Hardening

  • Audit: Überwachen Sie /var/lib/docker mit auditd (siehe Artikel 030).
  • Netzwerk: Nutzen Sie --iptables=false nur, wenn Sie genau wissen, was Sie tun (Docker bricht sonst Ihre UFW Regeln).
  • Images: Nutzen Sie immer spezifische Tags (myapp:1.2.3) statt :latest.

# Anhang: Cheatsheet

Aufgabe Befehl
Docker Version docker version
Systemweite Info docker info
Laufende Container docker ps
Alle Images listen docker images
Container interaktiv docker exec -it <name> /bin/bash
Ressourcen-Monitor docker stats