SaaS & Hosting

Docker und Kubernetes erklärt – Wenn Infrastruktur zum Code wird

Nico FreitagSaaS & Hosting

Docker und Kubernetes haben die Infrastruktur revolutioniert. Mit ihnen kannst du Apps konsistent deployen, egal ob auf deinem Laptop oder auf einem Produktions-Server. Aber die Konzepte sind komplex. Wir machen sie einfach.

Das Problem ohne Docker

Früher war das Problem: "It works on my machine." Developer programmiert auf seinem Laptop mit Python 3.8, MySQL 5.7. Der Code funktioniert. Der Code geht auf den Production Server mit Python 3.6, MySQL 5.5. Der Code läuft nicht mehr. Warum? Die Umgebungen sind unterschiedlich.

Die Lösung: Docker (Containers)

Docker erstellt einen "Container" – ein isoliertes Environment mit allem was die App braucht: - Python 3.8 - MySQL 5.7 - All dependencies - Konfiguration Dieser Container funktioniert auf jedem System (Laptop, Server, Cloud). Analogie: Docker ist wie ein Schiff-Container. Der Container ist sealed. Egal wo der Container hingehen – der Inhalt ist geschützt.

Wie funktioniert Docker?

```dockerfile # Dockerfile – Description wie Container gebaut wird FROM python:3.8 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"] ``` Mit diesem Dockerfile: ```bash docker build -t my-app:1.0 . docker run -p 5000:5000 my-app:1.0 ``` Jetzt läuft deine App in einem Container.

Docker Häufige Begriffe

Image: Die Blueprint für den Container (wie eine Klasse in OOP) Container: Ein laufender Instance einer Image (wie ein Object in OOP) Registry: Ein Ort wo Images gespeichert sind (Docker Hub, etc.) ``` Image -> Container (like Class -> Object) ```

Das Problem mit Docker Allein

Docker läuft auf einen Server gut. Aber was wenn der Server ausfällt? Deine App ist offline. Du brauchst mehrere Container auf mehreren Servern. Aber wer managt das? - Welcher Container läuft wo? - Welcher ist down und muss restart? - Wie load-balanciert man Requests? Das ist wo Kubernetes kommt.

Kubernetes (Orchestration)

Kubernetes ist ein System das Container auf mehreren Servern (Cluster) managt. ``` Kubernetes Cluster: - Server 1: Container A, Container B - Server 2: Container C - Server 3: Container D, Container E Kubernetes sagt: - Container C ist down -> Restart ihn auf Server 1 - Es kommen mehr Requests -> Scale zu 10 Container - Load Balance zwischen den 10 Containern ```

Kubernetes Concepts

Pod: Die kleinste Unit in Kubernetes. Usually 1 Container per Pod. Deployment: Beschreibung wie viele Pods du willst, wie du updaten willst Service: Load Balancer zwischen Pods Cluster: Viele Nodes (Server) zusammen ```yaml # Deployment – "Ich will 3 Pods von meiner App" apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 # 3 Pods selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: app image: my-app:1.0 ports: - containerPort: 5000 ```

Praktisches Beispiel

Deine Website wird gehackt, der Server läuft lagerlos. Mit Docker + Kubernetes: ```bash # Dein aktueller Deployment hat 5 Pods kubectl scale deployment my-app --replicas=10 # Kubernetes startet sofort 5 neue Pods auf verschiedene Nodes # Das ist 2x die Kapazität ``` Deine Website läuft wieder normal. Alles in 30 Sekunden.

Wann brauchst du Docker/Kubernetes?

Brauch Docker wenn: - Deine App hat komplexe Dependencies - Du willst konsistent über Entwicklung -> Production Brauch Kubernetes wenn: - Deine App hat viele Nutzer (Skalierung) - Du willst High Availability (mehrere Server) - Du willst Automation von Deployments Für Anfänger: Docker allein ist oft genug. Kubernetes später.

Managed Services

Selbst Kubernetes zu managen ist hard (viele Konfiguration). Stattdessen: - AWS ECS: AWS's Container Orchestration - Google Cloud Run: Simple Container Hosting - Vercel: Für Next.js/Frontend - Heroku: Simple Deployment - DigitalOcean App Platform: Einfacher als Kubernetes Für kleine Apps: Managed Services sind besser als selbst Kubernetes.

Fazit

Docker und Kubernetes haben Infrastructure-Handling vereinfacht. Für moderne Apps sind sie Standard. Aber für Anfänger: Fang mit Docker an (um deine App zu containerize). Scale zu Kubernetes wenn du es brauchst.

Häufige Fragen