TL;DR
Docker containerisiert Anwendungen und gewährleistet konsistente Umgebungen von Entwicklung bis Produktion. Es erleichtert Deployment, Skalierung und Infrastrukturverwaltung. Hier erfahren Sie, wie Sie Docker in 2026 verwenden.
Für wen ist das
- Entwickler, die Umgebungen standardisieren möchten
- DevOps-Ingenieure, die Infrastruktur verwalten
- Unternehmen, die Anwendungen skalieren möchten
Keywords (SEO)
docker, containerisierung, docker compose, kubernetes, container deployment
Was ist Docker?
Docker ist eine Containerisierungsplattform:
- Isolierte Umgebungen (Container)
- Konsistenz zwischen Umgebungen
- Leichtgewichtig (vs. virtuelle Maschinen)
- Schneller Start
Container vs. VM:
- VM: vollständiges OS, langsamer, mehr Ressourcen
- Container: geteiltes OS, schneller, weniger Ressourcen
Vorteile:
- "Funktioniert auf meinem Computer" → gelöst
- Schnellere Deployments
- Einfachere Skalierung
- Bessere Ressourcennutzung
Docker-Grundlagen
Dockerfile
Grundlegendes Beispiel:
# Base image
FROM node:18-alpine
# Working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy application code
COPY . .
# Expose port
EXPOSE 3000
# Start application
CMD ["npm", "start"]Build und Run
Image bauen:
docker build -t my-app:latest .Container ausführen:
docker run -p 3000:3000 my-app:latestIm Hintergrund ausführen:
docker run -d -p 3000:3000 --name my-app my-app:latestDockerfile Best Practices
1. Multi-Stage Builds
Image-Größe reduzieren:
# Stage 1: Build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 2: Production
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]2. Layer Caching
Optimale Reihenfolge:
# 1. Dependencies (ändern sich selten)
COPY package*.json ./
RUN npm ci
# 2. Anwendungscode (ändert sich oft)
COPY . .3. .dockerignore verwenden
.dockerignore:
node_modules
npm-debug.log
.git
.env
dist
*.md4. Minimale Base Images
Alpine Linux:
FROM node:18-alpine # ~5MB vs. ~150MB für node:18Distroless (noch kleiner):
FROM gcr.io/distroless/nodejs18-debian115. Non-Root User
Sicherheit:
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
USER nextjsDocker Compose
Grundkonfiguration
docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
- redis
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:Ausführen
Alle Services starten:
docker-compose up -dLogs:
docker-compose logs -f appStoppen:
docker-compose downKubernetes
Grundkonzepte
Pod:
- Kleinste Einheit
- Ein oder mehrere Container
- Geteilte Ressourcen (Netzwerk, Storage)
Deployment:
- Verwaltet Pod-Replikate
- Rolling Updates
- Rollback
Service:
- Exponiert Pods als Netzwerk
- Load Balancing
- Service Discovery
Grundlegendes Deployment
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-app:latest
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"Service:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancerAnwenden:
kubectl apply -f deployment.yaml
kubectl apply -f service.yamlSkalierung
Horizontal Pod Autoscaler (HPA)
Automatische Skalierung:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Manuelle Skalierung
kubectl scale deployment my-app --replicas=5Monitoring und Logging
Health Checks
Im Dockerfile:
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1In Kubernetes:
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5Logging
Docker-Logs:
docker logs my-app
docker logs -f my-app # FollowKubernetes-Logs:
kubectl logs deployment/my-app
kubectl logs -f deployment/my-appSicherheits-Best Practices
1. Images scannen
docker scan my-app:latest2. Minimale Berechtigungen
USER nonroot3. Secrets Management
Nicht im Dockerfile:
# ❌ Schlecht
ENV API_KEY=secret123Secrets verwenden:
# Kubernetes
apiVersion: v1
kind: Secret
metadata:
name: api-secret
data:
api-key: <base64-encoded>4. Regelmäßige Updates
Base Images aktualisieren:
FROM node:18-alpine # Neueste Version verwendenCI/CD mit Docker
GitHub Actions Beispiel:
- name: Build Docker image
run: docker build -t my-app:${{ github.sha }} .
- name: Push to registry
run: |
docker tag my-app:${{ github.sha }} my-registry/my-app:latest
docker push my-registry/my-app:latest
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/my-app app=my-registry/my-app:latestFAQ
Ist Docker für kleine Projekte nötig?
Nicht immer, aber lohnenswert. Erleichtert Deployment, gewährleistet Umgebungskonsistenz und bereitet auf Skalierung vor.
Docker vs. Kubernetes?
Docker: Containerisierung von Anwendungen. Kubernetes: Container-Orchestrierung (für größere Systeme).
Wie oft Base Images aktualisieren?
Regelmäßig (monatlich). Verwenden Sie Tools wie Dependabot für automatische Updates.
Möchten Sie Ihre Anwendung containerisieren?
Über den Autor
Wir bauen schnelle Websites, Web/Mobile-Apps, KI-Chatbots und Hosting — mit Fokus auf SEO und Conversion.
Empfohlene Links
Von Theorie zu Produktion — Branchly, Hosting-Stack und Referenzen.
