9.4 KiB
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