Przejdź do głównej zawartości

Konfiguracja Docker i Kubernetes przez CLI

Konteneryzujesz swoją aplikację po raz pierwszy. Tutorial Dockerfile pozwala Ci uzyskać działający obraz w dziesięć minut — 1.2 GB, działający jako root, bez health check, bez obsługi sygnałów i z cache buildu, który się unieważnia przy każdej zmianie kodu. Tutorial Kubernetes pozwala Ci uruchomić poda — bez limitów zasobów, bez proby readiness, bez pod disruption budget i z sekretami zahardkodowanymi w manifeście. Przejście od “to działa” do “to jest gotowe do produkcji” zabiera kolejne dwa dni researchu. Claude Code zwija to w jedną, dobrze ustrukturyzowaną rozmowę.

  • Workflow Claude Code do generowania zoptymalizowanych, bezpiecznych Dockerfiles i wielousługowych stacków Docker Compose z Twojego istniejącego projektu
  • Prompty gotowe do skopiowania, które produkują manifesty Kubernetes z odpowiednimi health checks, limitami zasobów, autoscaling i kontekstami bezpieczeństwa
  • Podejście do generowania chartów Helm, które tworzy sparametryzowane, specyficzne dla środowiska wdrożenia

Claude Code czyta Twój projekt i generuje Dockerfile, który pasuje — nie generyczny szablon.

Claude Code wykrywa, czy budujesz projekt Node.js, Python, Go, czy wielojęzykowy i generuje odpowiednio. Dla aplikacji Node.js oddziela warstwę npm ci od warstwy COPY . ., tak aby instalacja zależności była cachowana, chyba że package-lock.json się zmieni. Dla aplikacji Go produkuje pojedynczy statyczny binarny w końcowym etapie FROM scratch.

Po wygenerowaniu, zwaliduj obraz:

Okno terminala
# Zbuduj i sprawdź rozmiar obrazu
docker build -t myapp:test . && docker images myapp:test
# Uruchom skanowanie bezpieczeństwa
docker scout cve myapp:test
# Zweryfikuj, że health check działa
docker run -d --name test myapp:test && sleep 5 && docker inspect --format='{{.State.Health.Status}}' test

Potem iteruj:

The image is 280 MB because it includes the entire node_modules. Switch to a production prune step that removes devDependencies after building, and copy only node_modules and dist to the runtime stage.

Lokalny development powinien odzwierciedlać produkcję tak blisko, jak to możliwe. Claude Code generuje stos Docker Compose, który zawiera wszystkie Twoje zależności.

Health check z condition: service_healthy na depends_on jest krytyczny. Bez tego Twój kontener aplikacji startuje zanim PostgreSQL jest gotowy przyjmować połączenia, powodując crashe przy starcie.

Dla zespołów z wieloma serwisami:

Extend the Docker Compose to include our microservices: api-gateway (port 3000), user-service (port 3001), order-service (port 3002), and notification-service (port 3003). Each service has its own Dockerfile. Add a shared network, service-to-service communication via container names, and a single command to start the full stack. Also add an Nginx reverse proxy that routes /api/users/* to user-service, /api/orders/* to order-service, etc.

YAML Kubernetes jest gadatliwy i podatny na błędy. Claude Code generuje kompletne, gotowe do produkcji manifesty.

Generate Kubernetes manifests for deploying our application. Include: 1) Deployment with 3 replicas, rolling update strategy (maxSurge 1, maxUnavailable 0), pod anti-affinity to spread across nodes, 2) Service (ClusterIP) pointing to port 3000, 3) Ingress with TLS via cert-manager and rate limiting annotations, 4) ConfigMap for non-secret configuration (LOG_LEVEL, CACHE_TTL), 5) Secret references for DATABASE_URL and API keys (reference external secrets, do not hardcode values), 6) HorizontalPodAutoscaler scaling 3-10 replicas based on CPU (70%) and memory (80%), with scale-down stabilization of 5 minutes, 7) PodDisruptionBudget (minAvailable: 2), 8) resource requests (256Mi memory, 250m CPU) and limits (512Mi memory, 500m CPU), 9) liveness probe on /health, readiness probe on /ready, startup probe with 30-second failure threshold. Set security context to non-root, read-only filesystem, no privilege escalation.

Charty Helm zamieniają Twoje manifesty Kubernetes w sparametryzowane, wielokrotnego użytku pakiety.

Po wygenerowaniu, zwaliduj chart:

Okno terminala
# Zlintuj chart
helm lint ./chart
# Wyrenderuj szablony bez wdrażania (dry run)
helm template myapp ./chart -f chart/values-staging.yaml
# Wdróż na staging
helm upgrade --install myapp ./chart -f chart/values-staging.yaml -n staging

Bezpieczeństwo kontenerów nie jest opcjonalne. Claude Code może utwardzić Twoje kontenery od początku.

Review our Dockerfile and Kubernetes manifests for security issues. Check: 1) running as root (should be non-root), 2) using latest tag (should pin a specific version), 3) missing security context (should set readOnlyRootFilesystem, allowPrivilegeEscalation: false), 4) secrets in environment variables (should use Kubernetes Secrets or an external secret manager), 5) missing network policies (should restrict pod-to-pod communication), 6) container image from untrusted registry, 7) capabilities that should be dropped. Fix every issue and generate a NetworkPolicy that allows only the required traffic.

Jeśli Twój zespół używa zarówno maszyn Intel, jak i ARM (Mac M-series), potrzebujesz wieloarchitekturowych obrazów Docker.

Update our Dockerfile and CI pipeline to build multi-architecture images (linux/amd64 and linux/arm64). Use docker buildx with GitHub Actions cache. The build step should produce a single manifest that Docker automatically resolves to the correct architecture. Also update our docker-compose.yml to use platform: linux/amd64 for services that do not support ARM (like some database images).

Build Docker jest wolny, ponieważ cache unieważnia się przy każdej zmianie. Kolejność warstw ma znaczenie. COPY package*.json . musi przyjść przed COPY . ., aby zmiany w kodzie nie unieważniały cache zależności. Zapytaj Claude Code: “Reorder our Dockerfile layers to maximize cache reuse. The dependency installation layer should only rebuild when the lockfile changes.”

Pody Kubernetes crash-loop z OOMKilled. Limit pamięci jest za niski dla faktycznego użycia Twojej aplikacji. Zapytaj Claude Code: “Our pods are getting OOMKilled with a 512Mi limit. Analyze our application’s memory usage patterns and recommend appropriate resource requests and limits. Also add a memory monitoring sidecar that exports usage to Prometheus.”

Chart Helm działa na staging, ale zawodzi na produkcji. Zazwyczaj brakująca wartość lub zahardkodowane odniesienie. Zapytaj Claude Code: “Compare our values-staging.yaml and values-production.yaml with the template references. Find any template variable that is used but not defined in one of the values files.”

Voluminy Docker Compose mają problemy z uprawnieniami. Pliki utworzone wewnątrz kontenera są własnością roota, ale Twój użytkownik hosta nie może ich edytować. Użytkownik non-root wewnątrz kontenera i Twój użytkownik hosta mają różne UID. Zapytaj Claude Code: “Fix the volume permission issue by making the container user UID match our host user UID. Add a build arg for USER_UID that defaults to 1000.”

Health check przechodzi, ale aplikacja faktycznie nie jest gotowa. Endpoint /health, który po prostu zwraca 200, nie dowodzi, że aplikacja może obsługiwać ruch. Zapytaj Claude Code: “Update our readiness probe endpoint to check: database connection pool has available connections, Redis is reachable, and the last successful background job ran within the last 5 minutes.”