Docker GüvenliÄŸi: Konteyner Güvenlik Best Practice’leri

Container Security Fundamentals

Docker security encompasses image security, runtime protection, and orchestration security. With containers sharing the host kernel, a compromised container can potentially affect the entire system. Implementing defense-in-depth strategies is essential for production container environments.

Image Security

Always use official base images from trusted registries. Scan images with tools like Trivy, Snyk, or Azure Defender for vulnerabilities before deployment. Use multi-stage builds to minimize attack surface — final images should contain only runtime dependencies. Never embed secrets, credentials, or API keys in images.

Minimal Base Images

Use Alpine Linux or distroless images to reduce the attack surface. An Alpine-based Node.js image is 50MB vs 350MB for the default image. Fewer packages mean fewer potential vulnerabilities. Remove package managers and shells from production images when possible.

Runtime Security

Run containers as non-root users using the USER directive in Dockerfiles. Drop all Linux capabilities and add only those required with –cap-drop ALL –cap-add NET_BIND_SERVICE. Set containers as read-only with –read-only and mount writable volumes only where needed.

Resource Limits

Always set CPU and memory limits to prevent container resource exhaustion attacks. Use –memory and –cpus flags to constrain resource usage. Without limits, a single container can consume all host resources, affecting other containers and the host system.

Network Security

Use Docker networks to isolate container communication. Frontend containers should not directly access database containers. Implement network policies with Calico or Cilium for fine-grained control. Encrypt inter-container traffic with mutual TLS for sensitive workloads.

Secrets Management

Use Docker Secrets or external vault solutions like HashiCorp Vault or Azure Key Vault instead of environment variables for sensitive data. Docker Secrets are mounted as in-memory files, never written to disk, and only available to authorized services.

Registry Security

Use private registries like Azure Container Registry with vulnerability scanning enabled. Implement content trust with Docker Content Trust (DCT) to verify image integrity. Enable image signing to ensure only approved images are deployed.

CI/CD Security

  • Scan images in CI pipelines before pushing to registries
  • Implement admission controllers to block vulnerable images
  • Use OPA/Gatekeeper for policy enforcement in Kubernetes
  • Automate security updates for base images
  • Sign images and verify signatures in deployment pipelines

Key Features and Capabilities

The following are the core capabilities that make this technology essential for modern cloud infrastructure:

Image Scanning

Trivy, Snyk, and Azure Defender for Containers scan images for CVEs in OS packages, application dependencies, and misconfigurations at build and runtime

Rootless Containers

Docker rootless mode and Kubernetes SecurityContext runAsNonRoot eliminate root privilege escalation risks without application code changes

Network Policies

Calico and Cilium network policies enforce microsegmentation between containers, restricting east-west traffic to only explicitly allowed communication paths

Secrets Management

Docker Secrets and Kubernetes Secrets with external stores (Azure Key Vault, HashiCorp Vault) prevent hardcoded credentials in images and environment variables

Runtime Protection

Falco and Azure Defender monitor container behavior for anomalous process execution, file access, and network connections in real-time

Real-World Use Cases

Organizations across industries are leveraging this technology in production environments:

CI/CD Pipeline Security

Shift-left scanning in GitHub Actions blocks vulnerable images before reaching registries, reducing production vulnerability exposure by 90%

Multi-Tenant Platform

Platform teams enforce Pod Security Standards (Restricted) preventing privileged containers, host namespace sharing, and capability escalation

Financial Services

A bank implements read-only root filesystems, drops all Linux capabilities except NET_BIND_SERVICE, and requires signed images through Cosign/Notary

Healthcare Compliance

HIPAA-regulated workloads run in isolated namespaces with network policies blocking all ingress/egress except explicitly whitelisted endpoints

Best Practices and Recommendations

Based on enterprise deployments and production experience, these recommendations will help you maximize value:

  • Use minimal base images (distroless, Alpine, or scratch) — the average Docker Hub image contains 300+ CVEs in unused packages
  • Enable read-only root filesystems (readOnlyRootFilesystem: true) and mount writable volumes only for directories that require writes
  • Drop ALL Linux capabilities and add back only the specific ones needed: drop: [ALL], add: [NET_BIND_SERVICE] is a common pattern
  • Never store secrets in Docker images, environment variables, or config maps — use external secret stores with CSI driver integration
  • Implement image signing with Cosign and admission controllers (Kyverno, Gatekeeper) to enforce only trusted images run in production
  • Run containers as non-root user (UID 1000+) — add USER directive in Dockerfile and set runAsNonRoot: true in SecurityContext

Frequently Asked Questions

How often should container images be rebuilt?

Weekly minimum for base image updates, immediately for critical CVEs. Use automated dependency update tools (Dependabot, Renovate) with scan-and-rebuild pipelines. Image age over 30 days is a common security audit finding.

What is the difference between Docker Secrets and Kubernetes Secrets?

Docker Secrets are Swarm-native, stored encrypted in the Raft log. Kubernetes Secrets are base64-encoded by default (not encrypted) — enable etcd encryption at rest and use external secret stores (Azure Key Vault CSI, Sealed Secrets) for production security.

How do I prevent container escape attacks?

Never run privileged containers. Drop all capabilities. Use seccomp profiles (RuntimeDefault minimum). Enable AppArmor or SELinux profiles. Disable service account token mounting. Use gVisor or Kata Containers for workloads requiring kernel isolation.

You must be logged in to post a comment.
🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español