Tavo-IT Logo
Mittel20 min Lesezeit2025-06-10

Docker ContainerizationMasterclass

Vollständige Anleitung zur Containerisierung von Anwendungen mit Docker - von Grundlagen bis zu Multi-Stage Builds und Production-Best-Practices.

DockerContainerizationDevOpsInfrastructure

🐳 Was ist Docker?

Docker ist eine Containerisierungsplattform, die es ermöglicht, Anwendungen und deren Abhängigkeiten in leichtgewichtige, portable Container zu verpacken. Diese Container laufen konsistent auf jeder Umgebung - von der Entwicklung bis zur Produktion.

📦 Portabilität

Container laufen überall gleich

⚡ Effizienz

Weniger Ressourcenverbrauch als VMs

🔄 Skalierung

Schnelle Horizontal-Skalierung

🔧 Docker Installation

Windows Installation

# Docker Desktop für Windows herunterladen
# https://www.docker.com/products/docker-desktop

# Installation verifizieren
docker --version
docker-compose --version

Linux Installation (Ubuntu)

# Docker Repository hinzufügen
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

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

# User zu Docker-Gruppe hinzufügen
sudo usermod -aG docker $USER

📦 Docker Images erstellen

Erstes Dockerfile

# Dockerfile für eine Node.js Anwendung
FROM node:18-alpine

# Arbeitsverzeichnis setzen
WORKDIR /app

# Package.json kopieren
COPY package*.json ./

# Dependencies installieren
RUN npm ci --only=production

# Anwendungscode kopieren
COPY . .

# Port freigeben
EXPOSE 3000

# Startkommando definieren
CMD ["npm", "start"]

💡 Best Practice Tipps

  • Alpine Images verwenden - Kleiner und sicherer
  • Layer-Caching optimieren - Dependencies zuerst kopieren
  • .dockerignore nutzen - Unnötige Dateien ausschließen
  • Non-root User - Sicherheit durch eingeschränkte Rechte

🏗️ Multi-Stage Builds

React App mit Multi-Stage Build

# Build Stage
FROM node:18-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

# Production Stage
FROM nginx:alpine AS production

# Built assets kopieren
COPY --from=builder /app/dist /usr/share/nginx/html

# Custom nginx config
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

✅ Vorteile von Multi-Stage Builds

Kleinere Images

Nur Production-Artifacts im finalen Image

Bessere Sicherheit

Build-Tools nicht in Production

🐙 Docker Compose

Full-Stack Anwendung mit Compose

version: '3.8'

services:
  # Frontend Service
  frontend:
    build: 
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3000:80"
    depends_on:
      - backend
    environment:
      - REACT_APP_API_URL=http://backend:5000

  # Backend Service
  backend:
    build: 
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    depends_on:
      - database
    environment:
      - DATABASE_URL=postgresql://user:password@database:5432/mydb
      - JWT_SECRET=your-secret-key
    volumes:
      - ./uploads:/app/uploads

  # Database Service
  database:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  # Redis Cache
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:

Compose Kommandos

# Services starten
docker-compose up -d

# Services mit Build
docker-compose up --build

# Logs anzeigen
docker-compose logs -f

# Services stoppen
docker-compose down

# Mit Volumes löschen
docker-compose down -v

🔒 Container Security

⚠️ Security Risks

  • • Vulnerable Base Images
  • • Root User in Container
  • • Exposed Secrets
  • • Ungeschützte Container Ports
  • • Privilege Escalation

✅ Security Best Practices

  • • Minimal Base Images (Alpine)
  • • Non-root User verwenden
  • • Secrets Management
  • • Regular Security Scans
  • • Container Runtime Security

Sicheres Dockerfile

FROM node:18-alpine

# Non-root user erstellen
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

# Dependencies installieren
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

# Code kopieren und Ownership setzen
COPY --chown=nextjs:nodejs . .

# User wechseln
USER nextjs

EXPOSE 3000
CMD ["npm", "start"]

🚀 Production Best Practices

📊 Monitoring

  • • Container Metrics
  • • Health Checks
  • • Log Aggregation
  • • Performance Monitoring

🔄 Deployment

  • • Rolling Updates
  • • Blue-Green Deployment
  • • Canary Releases
  • • Rollback Strategien

⚡ Performance

  • • Resource Limits
  • • Image Optimization
  • • Layer Caching
  • • Registry Optimization

Health Checks implementieren

# Dockerfile Health Check
FROM node:18-alpine

WORKDIR /app
COPY . .
RUN npm install

# Health Check hinzufügen
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3   CMD curl -f http://localhost:3000/health || exit 1

EXPOSE 3000
CMD ["npm", "start"]

🎯 Zusammenfassung

Docker Containerization ist ein fundamentaler Baustein moderner DevOps-Praktiken. Mit den richtigen Techniken und Best Practices können Sie:

Erreichte Ziele

  • ✅ Konsistente Deployment-Umgebungen
  • ✅ Effiziente Ressourcennutzung
  • ✅ Skalierbare Microservices-Architektur
  • ✅ Vereinfachte CI/CD-Pipelines

Nächste Schritte

  • 🔄 Kubernetes für Orchestrierung
  • 🔍 Container Monitoring Setup
  • 🛡️ Advanced Security Hardening
  • 📊 Performance Optimization

📚 Verwandte Artikel