04 · Containers#
"Son commit-image-deploy döngüsünü 90 saniyede yapamayan ekip, production hata düzeltmesinde 3 saatte yapar."
Container imajlarınızın hızlı, küçük, güvenli olması için 2026 referansı.
İçindekiler#
| Dosya | Konu |
|---|---|
Dockerfile-Best-Practices.md | 20 madde: layer, cache, user, healthcheck, COPY sırası |
Multi-Stage-Builds.md | Builder/runner ayrımı, dağıtım imajı 10x küçültme |
Distroless-and-Chainguard.md | gcr.io/distroless, Chainguard images, minimal CVE attack surface |
BuildKit-Tips.md | Cache mount, secret mount, SSH agent forwarding, multi-platform |
Image-Signing-Cosign.md | Sigstore + cosign keyless imzalama, Kyverno verifyImages |
Container-vs-WASM.md | Wasm ne zaman container'ı yener (Spin, wasmCloud) |
"İyi imaj" karar listesi#
- Multi-stage build (final imaj sadece runtime'ı içerir)
- Non-root user (
USER 65532veya isim) -
HEALTHCHECKtanımlı -
COPY --chownile ownership doğru - Tag'ler
:latestdeğil semantic (:v1.2.3,:sha-abc1234) - Imaj imzalı (cosign) ve SBOM eşliğinde
- Vulnerability scan başarılı (Trivy/Grype)
- Imaj boyutu < 100 MB (scratch/distroless ile < 30 MB)
-
.dockerignoreile gereksiz dosyalar dışarıda
Tipik base image seçimi#
| Kullanım | Önerilen 2026 |
|---|---|
| Go binary | gcr.io/distroless/static-debian12 (8 MB) |
| Node.js | cgr.dev/chainguard/node:latest veya node:20-alpine |
| Python | cgr.dev/chainguard/python:latest veya python:3.12-slim |
| Java | cgr.dev/chainguard/jre:latest veya eclipse-temurin:21-jre-alpine |
| .NET | mcr.microsoft.com/dotnet/runtime:8.0-alpine |
| Generic | cgr.dev/chainguard/wolfi-base (rolling, security-focused) |
❌ Kaçın:
ubuntu:22.04,centos:7,debian:bullseye(büyük, fazla CVE).