---
name: shadd0wtaka/devops-docker-kubernetes-skill
source: https://app.decimal.ai/s/shadd0wtaka-devops-docker-kubernetes-skill@1/SKILL.md
source_sha256: 421072034433
---

# DevOps Docker & Kubernetes Skill

Hands-on Workflows für Docker, Docker Compose, Kubernetes, Container-Orchestrierung und Image-Management.

## Docker Grundlagen

### Image bauen & managen
```bash
docker build -t myapp:latest .
docker tag myapp:latest registry.example.com/myapp:v1.0
docker push registry.example.com/myapp:v1.0
docker pull alpine:3.19
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
docker rmi $(docker images -f "dangling=true" -q)  # clean untagged
```

### Container laufen lassen
```bash
docker run -d --name web -p 8080:80 --restart unless-stopped nginx:alpine
docker run -it --rm --entrypoint sh alpine  # debug
docker exec -it web sh
docker logs -f --tail 100 web
docker stats --no-stream
docker inspect web | jq '.[].NetworkSettings.IPAddress'
```

### Docker Compose
```yaml
# docker-compose.yml
services:
  api:
    build: ./api
    ports: ["3000:3000"]
    depends_on: [db, redis]
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/app
  db:
    image: postgres:16-alpine
    volumes: [pgdata:/var/lib/postgresql/data]
  redis:
    image: redis:7-alpine
volumes: {pgdata:}
```
```bash
docker compose up -d --build
docker compose logs -f api
docker compose exec db psql -U user app
docker compose down -v  # mit Volume-Löschung
```

## Kubernetes

### Deployment
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 3
  selector:
    matchLabels: { app: app }
  template:
    metadata:
      labels: { app: app }
    spec:
      containers:
      - name: app
        image: myapp:latest
        ports: [{containerPort: 3000}]
        resources:
          limits: {cpu: "500m", memory: "256Mi"}
          requests: {cpu: "200m", memory: "128Mi"}
        livenessProbe: {httpGet: {path: /health, port: 3000}}
```

### Kubectl Essentials
```bash
kubectl get pods -o wide --watch
kubectl logs -f deployment/app
kubectl exec -it pod-name -- sh
kubectl port-forward service/app 8080:80
kubectl describe pod pod-name
kubectl top pods
kubectl delete pod --grace-period=0 --force pod-name
```

### Helm
```bash
helm create mychart
helm install release ./mychart --values prod-values.yaml
helm upgrade release ./mychart --set image.tag=v2
helm rollback release 1
helm list -a
```

## Troubleshooting
```bash
docker logs container 2>&1 | grep ERROR
docker exec container cat /var/log/app.log
kubectl describe pod xxx | grep -A5 Events
kubectl logs --previous pod-name  # crashed container logs
docker system df  # disk usage
docker system prune -af --volumes  # extreme clean
```