Zurück zu KI
Docker & Deployments mit KI
Container bauen, über mehrere VMs deployen und mit Cloudflare Tunnels sicher veröffentlichen.
Warum Docker?
Docker isoliert Anwendungen in Containern: Deine App läuft überall gleich — egal ob auf dem Entwicklungsrechner oder dem Produktiv-Server. Keine „bei mir funktioniert es aber“-Probleme mehr.
Dockerfile mit Claude Code erstellen
# Beispiel: Node.js-App
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server/index.js"]
Docker Compose für App + Datenbank
# docker-compose.yml
services:
app:
build: .
ports:
- "127.0.0.1:3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
depends_on:
- db
restart: unless-stopped
db:
image: postgres:17-alpine
ports:
- "127.0.0.1:5433:5432"
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=myapp
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
volumes:
pgdata:
Multi-VM Deployment
Wenn dein Dev-Server und Prod-Server verschiedene VMs sind:
# 1. Auf dem Dev-Server bauen
docker build -t meine-app:latest .
docker save meine-app:latest | gzip > meine-app.tar.gz
# 2. Zum Prod-Server transferieren
scp meine-app.tar.gz user@prod-server:/tmp/
# 3. Auf dem Prod-Server laden und starten
ssh user@prod-server
docker load < /tmp/meine-app.tar.gz
cd /opt/meine-app
docker compose up -d
Cloudflare Tunnel für sichere Exposition
Statt Ports direkt zu öffnen, nutze einen Cloudflare Tunnel. Dein Server ist nie direkt aus dem Internet erreichbar.
# Cloudflare Tunnel installieren
curl -L --output cloudflared.deb \
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# Tunnel erstellen und konfigurieren
cloudflared tunnel login
cloudflared tunnel create mein-tunnel
cloudflared tunnel route dns mein-tunnel app.meine-domain.de
# Als Systemdienst installieren
sudo cloudflared service install
Container-Monitoring
# Health Check per Skript
#!/bin/bash
CONTAINER="meine-app"
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
echo "$CONTAINER ist gestoppt! Starte neu..."
cd /opt/meine-app && docker compose up -d
# Telegram-Alert senden
fi
Verwende immer 127.0.0.1 statt 0.0.0.0 für Port-Bindings. So ist der Dienst nur lokal erreichbar — der Cloudflare Tunnel leitet den Traffic sicher weiter.