Container-Tools
Container-Tools
Die wichtigsten Container-Technologien im Überblick – von Docker und Kubernetes über Podman bis zu Portainer und Helm. Mit interaktiven Generatoren, Cheat Sheets und Ressourcen-Rechnern.
Inhaltsverzeichnis
Schnellübersicht
Auf dieser Seite lernen Sie die wichtigsten Container-Tools kennen:
- Container-Grundlagen: Was sind Container und warum sind sie wichtig?
- Die wichtigsten Tools: Docker, Kubernetes, Podman, Portainer, Helm, etc.
- Vergleichstabelle: Alle Tools auf einen Blick
- Interaktive Generatoren: Dockerfile & Compose-Generator
- Ressourcen-Rechner: CPU, RAM und Storage für Container planen
- Cheat Sheets: Die wichtigsten Befehle für Docker, K8s, Compose
- Best Practices: Security, Performance, Size, Network
- FAQ: Häufige Fragen und Antworten
1. Was sind Container?
Definition
Container-Tools sind Software-Werkzeuge zur Erstellung, Verwaltung, Orchestrierung und Überwachung von Containern – leichtgewichtige, portable Ausführungsumgebungen, die Anwendungen mit allen Abhängigkeiten paketieren.
Container-Tools decken den gesamten Lifecycle ab: vom Build (Docker, Buildah) über die Registry (Docker Hub, Harbor) und Orchestrierung (Kubernetes) bis zu Security (Trivy, Falco) und Monitoring (Prometheus, Grafana).
Warum wichtig? Container revolutionierten die Software-Entwicklung durch Portabilität („läuft überall"), Isolation, Ressourceneffizienz (shared Kernel) und Skalierbarkeit.
Container vs. Virtuelle Maschinen
Container sind leichtgewichtige, portable Ausführungseinheiten, die eine Anwendung mit allen ihren Abhängigkeiten (Bibliotheken, Konfigurationsdateien, etc.) paketieren. Im Gegensatz zu VMs teilen sich Container den Host-Kernel und sind daher deutlich ressourcenschonender.
- Container: Start in Millisekunden, MB-Größe, teilen Kernel
- VMs: Start in Minuten, GB-Größe, eigener Kernel
- Vorteile: Portabilität, Skalierbarkeit, Reproduzierbarkeit, Effizienz
2. Die wichtigsten Container-Tools
Ein Überblick über die wichtigsten Tools im Container-Ökosystem – von der Runtime bis zum Orchestrierungssystem.
Docker
Die populärste Container-Plattform. Ermöglicht das Bauen, Teilen und Ausführen von Containern.
- Dockerfile zum Bauen von Images
- Docker Hub als Registry
- Docker CLI für alle Operationen
- Riesige Community & Ecosystem
Docker Compose
Definiert und betreibt Multi-Container-Docker-Anwendungen über YAML-Dateien.
- YAML-basierte Konfiguration
- Ein Befehl startet alle Services
- Ideal für Entwicklung & Testing
- Networking & Volumes integriert
Kubernetes (K8s)
Das führende Open-Source-System zur Automatisierung von Deployment, Skalierung und Management containerisierter Anwendungen.
- Auto-Scaling & Self-Healing
- Service Discovery & Load Balancing
- Rollouts & Rollbacks
- Multi-Cloud-fähig
Podman
Red Hats Alternative zu Docker. Läuft ohne Daemon und unterstützt rootless Container.
- Kein Daemon nötig
- Rootless Container (sicherer)
- Docker-kompatible CLI
- Pod-Konzept (ähnlich K8s)
Portainer
Leichtgewichtige Management-UI für Docker, Swarm, Kubernetes und ACI. Ideal für Einsteiger.
- Browser-basierte Verwaltung
- Container, Images, Volumes, Networks
- App-Templates
- Multi-User & RBAC
Helm
Der "apt-get" für Kubernetes. Vereinfacht das Deployment komplexer Anwendungen mit Charts.
- Helm Charts als Pakete
- Templating mit Go-Templates
- Versionierung von Releases
- Artifact Hub als Repository
Docker Swarm
Dockers eingebautes Orchestrierungstool. Einfacher als K8s, aber weniger Features.
- In Docker integriert
- Einfache Einrichtung
- Service Discovery
- Rolling Updates
Rancher
Enterprise-Plattform zur Verwaltung mehrerer Kubernetes-Cluster über eine zentrale UI.
- Multi-Cluster-Management
- Integrierte CI/CD (Fleet)
- User-Authentifizierung
- Catalog für Helm-Charts
containerd
Die zugrundeliegende Container-Runtime, die von Docker, K8s und anderen genutzt wird.
- CNCF-Graduated-Projekt
- Von Docker abgespalten
- Standard in K8s
- Leichtgewichtig & performant
LXC / LXD
Linux-Container, die komplette Betriebssysteme ausführen – ein Hybrid zwischen VM und Container.
- System-Container (vollständiges OS)
- LXD als Management-Tool
- Sehr performant
- Ideal für Legacy-Apps
3. Tool-Vergleich
Alle wichtigen Container-Tools auf einen Blick – für die schnelle Entscheidung.
| Tool | Typ | Daemon | Rootless | GUI | Hauptanwendung |
|---|---|---|---|---|---|
| Docker | Runtime | Ja | Nein (Standard) | Nein | Entwicklung, Single-Host |
| Docker Compose | Orchestrierung | Ja (via Docker) | Nein | Nein | Multi-Container-Apps |
| Kubernetes | Orchestrierung | Ja (API-Server) | Ja | Dashboard | Enterprise, Multi-Host |
| Podman | Runtime | Nein | Ja | Podman Desktop | Security-fokussiert |
| Portainer | Management | Ja | Ja | Ja (Hauptfeature) | GUI-Management |
| Helm | Package Manager | Nein | Nein | Nein | K8s-Deployments |
| Docker Swarm | Orchestrierung | Ja (via Docker) | Nein | Nein | Einfaches Clustering |
| Rancher | Management | Ja | Ja | Ja (Hauptfeature) | Multi-Cluster K8s |
| containerd | Runtime | Ja | Ja | Nein | Low-Level Runtime |
| LXC/LXD | System-Container | Ja | Ja | Nein | System-Container |
4. Interaktive Generatoren
Erstellen Sie im Handumdrehen Dockerfiles und Compose-Dateien mit unseren interaktiven Generatoren.
Code-Generatoren
5. Container-Ressourcen-Rechner
Planen Sie die benötigten Ressourcen für Ihre Container-Umgebung.
Ressourcen-Planung
Konfiguration
Ergebnis
6. Cheat Sheets – Die wichtigsten Befehle
Schnellreferenzen für die wichtigsten Container-Tools – immer griffbereit.
Docker Basics
docker build -t myapp:1.0 .
docker run -d -p 8080:80 myapp
docker ps
docker logs -f container_id
docker exec -it container_id /bin/sh
docker stop container_id
docker system prune -a
Kubernetes (kubectl)
kubectl get pods
kubectl apply -f deployment.yaml
kubectl describe pod pod_name
kubectl logs pod_name
kubectl exec -it pod_name -- /bin/sh
kubectl scale deployment name --replicas=5
kubectl rollout status deployment/name
Docker Compose
docker compose up -d
docker compose down
docker compose ps
docker compose logs -f service
docker compose build --no-cache
docker compose exec service /bin/sh
docker compose pull
Podman
podman run -d --name web nginx
podman pod create --name mypod
podman generate kube pod > pod.yaml
podman play kube pod.yaml
podman system df
podman unshare
7. Best Practices für Container
Security
- Container nicht als root ausführen
- Regelmäßige Image-Scans (Trivy, Snyk)
- Read-only Filesystem verwenden
- Keine Secrets in Images hardcoden
- Resource Limits setzen (CPU/RAM)
- Minimale Basis-Images nutzen (Alpine, Distroless)
Performance
- Multi-Stage Builds für kleinere Images
- Layer-Caching optimal nutzen
- Wenige RUN-Befehle (zusammenfassen)
- .dockerignore für unnötige Dateien
- Health-Checks konfigurieren
- Readiness/Liveness Probes in K8s
Image-Größe
- Alpine oder Distroless als Basis
- Keine unnötigen Packages installieren
- Cache und Temp-Dateien löschen
- Multi-Stage-Builds: Build-Tools nur in Stage 1
- Regelmäßig
docker system prune - Image-Größe im CI/CD prüfen
Networking
- Eigene Docker-Netzwerke erstellen
- Services über Namen ansprechen
- Reverse Proxy (Traefik, Nginx) nutzen
- Keine Ports unnötig exponieren
- TLS/SSL für externe Kommunikation
- Network Policies in K8s definieren
12-Factor-App Methodology
Die 12-Factor-App ist ein Leitfaden für moderne, containerisierte Anwendungen:
- Codebase: Eine Codebase, viele Deployments
- Dependencies: Explizit deklarieren
- Config: In Umgebungsvariablen speichern
- Backing Services: Als angehängte Ressourcen behandeln
- Build, Release, Run: Streng trennen
- Processes: Stateless, shared-nothing
- Port binding: Selbst exportieren
- Concurrency: Scale out via Prozesse
- Disposability: Schneller Start, graceful Shutdown
- Dev/Prod parity: Möglichst gleich halten
- Logs: Als Event-Stream behandeln
- Admin processes: Als one-off Tasks
8. FAQ – Häufige Fragen & Antworten
Häufige Fragen zu Container-Tools
Docker ist eine Container-Runtime – es baut und betreibt einzelne Container. Kubernetes ist ein Orchestrierungssystem – es verwaltet viele Container über mehrere Hosts hinweg.
- Docker: "Wie baue und starte ich einen Container?"
- Kubernetes: "Wie betreibe ich 100 Container auf 10 Servern?"
Sie ergänzen sich: Docker baut die Container, Kubernetes orchestriert sie.
Podman hat einige Vorteile gegenüber Docker:
- Daemonless: Kein Hintergrunddienst nötig → weniger Angriffsfläche
- Rootless: Container können ohne Root-Rechte laufen → sicherer
- Docker-kompatibel: Alias
alias docker=podmanfunktioniert - Pod-Konzept: Ähnlich wie Kubernetes-Pods
Nachteile: Kleinere Community, weniger Tools, Docker Compose nur eingeschränkt unterstützt (podman-compose).
Kubernetes ist sinnvoll bei:
- Mehr als 10-20 Container
- Auto-Scaling erforderlich
- Multi-Host-Deployment
- Self-Healing gewünscht
- Complex Rollouts & Rollbacks
- Multi-Cloud-Strategie
Kubernetes ist Overhead bei:
- Wenigen Containern (< 5)
- Single-Host-Deployment
- Einfachen Anwendungen
- Begrenztem Team-Know-how
Für einfache Setups reicht Docker Compose oder Docker Swarm.
Die wichtigsten Strategien:
- Alpine als Basis: ~5 MB statt ~100 MB (Ubuntu)
- Multi-Stage Builds: Build-Tools nur in Stage 1, nur App in Stage 2
- Weniger Layers: RUN-Befehle zusammenfassen mit
&& - Cache löschen:
rm -rf /var/cache/apt/*nach Installation - .dockerignore: Unnötige Dateien ausschließen
- Distroless Images: Nur Runtime, keine Shell
Beispiel Multi-Stage:
FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
Image: Ein read-only Template mit allem, was zum Ausführen einer Anwendung nötig ist (Code, Runtime, Libraries, ENV). Vergleichbar mit einer BluRay.
Container: Eine laufende Instanz eines Images. Vergleichbar mit dem abgespielten Film. Container können gestartet, gestoppt, gelöscht werden – das Image bleibt unverändert.
Analogie:
- Image = Rezept (statisch)
- Container = Der zubereitete Kuchen (instanziiert)
Die wichtigsten Security-Maßnahmen:
- Non-root User:
USER nodeim Dockerfile - Read-only FS:
--read-onlyFlag - Image Scanning: Trivy, Snyk, Docker Scout
- Resource Limits:
--memory=512m --cpus=0.5 - Secrets Management: Docker Secrets, K8s Secrets, Vault
- Network Policies: Nur notwendige Kommunikation erlauben
- Regelmäßige Updates: Basis-Images aktuell halten
- Capabilities reduzieren:
--cap-drop=ALL
Helm ist der Package Manager für Kubernetes. Ähnlich wie apt für Debian oder npm für Node.js.
Vorteile:
- Charts: Vorgefertigte Pakete für komplexe Apps (WordPress, MySQL, etc.)
- Templating: Go-Templates für flexible Konfiguration
- Versionierung: Rollbacks auf vorige Versionen
- Repositories: Artifact Hub mit tausenden Charts
Beispiel:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-wordpress bitnami/wordpress
Container sind ephemeral – Daten im Container gehen beim Löschen verloren. Für Persistenz gibt es drei Optionen:
- Volumes: Von Docker verwaltet, beste Performance
docker volume create mydata
docker run -v mydata:/app/data myapp - Bind Mounts: Direktes Mapping zum Host-Dateisystem
docker run -v /host/path:/container/path myapp - tmpfs Mounts: Im RAM, nicht persistent
docker run --tmpfs /tmp myapp
Empfehlung: Volumes für Datenbanken, Bind Mounts für Entwicklung.
Beide sind Orchestrierungstools, aber mit unterschiedlicher Komplexität:
Docker Swarm:
- In Docker integriert (einfach zu aktivieren)
- Weniger Features, aber einfacher zu lernen
- Gut für kleine bis mittlere Setups
- YAML-basierte Konfiguration
Kubernetes:
- Industriestandard, sehr mächtig
- Steile Lernkurve
- Ideal für Enterprise und komplexe Setups
- Riesiges Ökosystem (Helm, Operators, etc.)
Empfehlung: Swarm für einfache Setups, K8s für Enterprise.
Schritt-für-Schritt Debugging:
- Logs prüfen:
docker logs container_id - Status prüfen:
docker inspect container_id - Exit Code analysieren:
- 0 = normal beendet
- 1 = allgemeiner Fehler
- 126 = Command nicht ausführbar
- 127 = Command nicht gefunden
- 137 = OOM killed (zu wenig RAM)
- 139 = Segmentation Fault
- Interaktiv starten:
docker run -it image /bin/sh - Command manuell testen: CMD im Dockerfile durch
sleep infinityersetzen, dann exec
Zusammenfassung
Die wichtigsten Punkte
- Container: Leichtgewichtige, portable Ausführungseinheiten mit allen Abhängigkeiten
- Docker: Der De-facto-Standard für Container-Runtime
- Docker Compose: Multi-Container-Apps über YAML definieren
- Kubernetes: Enterprise-Orchestrierung für viele Container
- Podman: Daemonless, rootless Alternative zu Docker
- Portainer: Web-GUI für einfaches Container-Management
- Helm: Package Manager für Kubernetes
- Best Practices: Non-root, Image Scanning, Multi-Stage Builds, Resource Limits
- 12-Factor-App: Leitfaden für moderne, containerisierte Anwendungen
- Security: Read-only FS, Secrets Management, Network Policies
Empfehlung für den Einstieg
- Schritt 1: Docker installieren und erste Container starten
- Schritt 2: Dockerfile schreiben lernen
- Schritt 3: Docker Compose für Multi-Container-Apps
- Schritt 4: Portainer für GUI-Management ausprobieren
- Schritt 5: Bei Bedarf zu Kubernetes wechseln
Weiterführende Themen
IaaS, PaaS, SaaS – Cloud-Modelle und Deployment-Strategien.
Zu Cloud ComputingLinux als Basis für Container-Hosts – Administration und Best Practices.
Zu Linux ServerDNS, DHCP und weitere Netzwerkdienste im Container-Umfeld.
Zu NetzwerkdienstenSecurity-Best Practices für Container und Kubernetes.
Zur Netzwerksicherheit