Files
mkdocs-etz/mkdocs/docs/bonus/docker-grundlagen.md
2025-12-14 10:41:53 +01:00

9.4 KiB

Docker-Grundlagen

Virtuelle Maschinen (VMs) vs. Container

Kriterium Virtuelle Maschine (VM) Container
Isolation Vollständige OS-Isolation (Hardware-Ebene) Prozess-Isolation (OS-Ebene)
Ressourcenverbrauch Hoch (eigenes OS pro VM) Gering (teilt Host-OS-Kernel)
Startzeit Minuten Sekunden
Portabilität Schwerer (große Images) Leicht (kleine Images)
Anwendungsfall Vollständige Systeme (z. B. Windows auf Linux) Mikroservices, Web-Apps, Datenbanken

Fazit: Container sind ideal für schnelle, ressourcenschonende Bereitstellung von Anwendungen.

Docker installieren

Immer aktuelles Setup anschauen

# Alte Docker-Versionen entfernen
sudo apt removes docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc
# Abhängigkeiten installieren
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# Docker-Repository hinzufügen
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

# Docker installieren
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Docker-Dienst starten und aktivieren
sudo systemctl enable docker
sudo systemctl start docker

# Benutzer zur Docker-Gruppe hinzufügen (für Passwortlosigkeit)
sudo usermod -aG docker $USER
newgrp docker  # Aktuelle Shell aktualisieren

Erste Schritte: "Hello World" mit Docker

Fertigen Container ausprobieren:

docker run hello-world

Ausgabe:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Tatsächlich erklärt der Container selbst was er getan hat.

  • docker run: Führt einen Container aus.
  • hello-world: Offizielles Test-Image von Docker Hub.

Eigenes Dockerfile für einen Webserver (Nginx)

Dockerfile

Erstellen Sie eine Datei namens Dockerfile mit folgendem Inhalt:

# Basis-Image: Offizielles Nginx-Image
FROM nginx:latest

# Standard-HTML-Seite ersetzen
COPY index.html /usr/share/nginx/html

# Port 80 freigeben
EXPOSE 80

HTML-Datei bereitstellen

Erstellen Sie eine Datei index.html im selben Verzeichnis:

<!DOCTYPE html>
<html>
<head>
    <title>Meisterkurs IT</title>
</head>
<body>
    <h1>Willkommen zum Docker-Webserver!</h1>
    <p>Dieser Container läuft auf Port 80.</p>
</body>
</html>

Image bauen und Container starten

# Image aus dem Dockerfile bauen
docker build -t mein-nginx .

# Container im Hintergrund starten und Port 8080 des Hosts auf Port 80 des Containers mappen
docker run -d -p 8080:80 --name mein-webserver mein-nginx

Testen

Öffnen Sie einen Browser und rufen Sie http://<Ihre-Server-IP>:8080 auf. Sie sollten die HTML-Seite sehen.

Docker Compose für BackupPC

Warum Docker Compose?

  • Vereinfacht das Management mehrerer Container
  • Definiert alle Dienste in einer YAML-Datei.

Beispiel: backuppc/docker-compose.yml für BackupPC

compose-Dateien immer in einem Ordner!

services:
  backuppc:
    image: adferrand/backuppc
    container_name: backuppc
    restart: unless-stopped
    ports:
      - "8081:80"  # Webinterface auf Port 8081
    volumes:
      - /etc/localtime:/etc/localtime:ro # Uhrzeit vom Host
      - /etc/timezone:/etc/timezone:ro # Zeitzone vom Host
      - ./etc:/etc/backuppc # Einstellungen
      - ./home:/home/backuppc # "Userdata" von backuppc. z.B. ssh-keys
      - ./backups:/data/backuppc # Das Backupverzeichnis
    environment:
      - BACKUPC_WEB_USER=meisterkurs
      - BACKUPC_WEB_PASSWORD=passw0rd#
      - BACKUPPC_UUID=100
      - BACKUPPC_GUID=101

Projekt starten

# Docker Compose-Projekt starten
docker compose up -d

# Status prüfen
docker compose ps

# Log des Container anzeigen
docker compose logs

Zugriff auf BackupPC

Öffnen Sie http://<Ihre-Server-IP>:8081 im Browser. Anmeldung mit meisterkurs und passw0rd.

Docker-Grundlagenbefehle

Container-Verwaltung

Befehl Beschreibung
docker ps Liste aller laufenden Container anzeigen.
docker ps -a Liste aller Container (auch gestoppte) anzeigen.
docker start Einen gestoppten Container starten.
docker stop Einen laufenden Container stoppen.
docker restart Einen Container neu starten.
docker rm Einen gestoppten Container entfernen.
docker rm -f Einen Container erzwingen zu entfernen (auch laufende).
docker logs Logs eines Containers anzeigen.
docker logs -f Logs eines Containers live verfolgen.
docker exec -it bash Eine interaktive Shell im laufenden Container öffnen.
docker inspect Detaillierte Informationen zu einem Container anzeigen (z. B. IP, Volumes).

Image-Verwaltung

Befehl Beschreibung
docker images Liste aller lokalen Images anzeigen.
docker pull Ein Image von Docker Hub herunterladen.
docker rmi Ein Image entfernen.
docker rmi -f Ein Image erzwingen zu entfernen.
docker build -t . Ein Image aus einem Dockerfile im aktuellen Verzeichnis bauen.
docker push Ein Image zu Docker Hub oder einer Registry hochladen.

Docker Compose-Befehle

Befehl Beschreibung
docker compose up -d Ein Projekt im Hintergrund starten (Detached-Modus).
docker compose up --build Projekt starten und Images neu bauen (falls Änderungen im Dockerfile).
docker compose down Ein Projekt komplett stoppen und entfernen (Container, Netzwerke, Volumes).
docker compose ps Status aller Container im Projekt anzeigen.
docker compose logs Logs aller Container im Projekt anzeigen.
docker compose logs -f Logs aller Container live verfolgen.
docker compose logs Logs eines bestimmten Services anzeigen.
docker compose restart Einen bestimmten Service im Projekt neu starten.
docker compose build Images für alle Services im Projekt neu bauen.
docker compose pull Alle Images für das Projekt neu herunterladen.
docker compose config Die Konfiguration des Projekts validieren (z. B. Syntax prüfen).
docker compose top Prozesse in den Containern des Projekts anzeigen.

Volumes und Netzwerke

Befehl Beschreibung
docker volume ls Liste aller Docker-Volumes anzeigen.
docker volume inspect Details zu einem Volume anzeigen (z. B. Mountpunkt).
docker volume rm Ein Volume entfernen.
docker network ls Liste aller Docker-Netzwerke anzeigen.
docker network inspect Details zu einem Netzwerk anzeigen (z. B. verbundene Container).

Praktische Beispiele:

BackupPC-Projekt neu starten

# Projekt stoppen und entfernen
docker compose down

# Projekt mit neuem Passwort starten
docker compose up -d

Logs von BackupPC live verfolgen

docker compose logs -f backuppc

Shell im BackupPC-Container öffnen

docker exec -it backuppc bash

BackupPC-Image neu bauen (nach Änderungen am Dockerfile)

docker compose build backuppc
docker compose up -d

Alle Images und Container bereinigen

# Alle gestoppten Container entfernen
docker container prune

# Alle nicht verwendeten Images entfernen
docker image prune -a

# Alle nicht verwendeten Volumes entfernen
docker volume prune