Skip to content
Back to Blog
8 Docker Security Best Practices yang Wajib Lo Tahu untuk Production
DevOps

8 Docker Security Best Practices yang Wajib Lo Tahu untuk Production

March 09, 2026
teguh

Kenapa Docker Security Itu Penting?

Banyak developer berpikir bahwa kalau sudah pakai Docker, masalah keamanan akan otomatis selesai. Tapi kenyataannya, container yang tidak diamankan dengan baik bisa jadi pintu masuk bagi attacker. Bayangkan lo punya rumah dengan pintu terkunci, tapi semua jendela terbuka. Begitulah Docker tanpa security measures.

Di artikel ini, kita akan bahas cara mengamank Docker untuk production — dari image scanning sampai runtime protection.

1. Gunakan Base Image yang Aman

Ini terdengar sepele, tapi banyak yang masih pakai latest tag untuk base image. Bad idea. Base image yang tidak di-maintain punya vulnerability yang sudah diketahui.

Solusinya:

  • Gunakan tag spesifik, contoh: node:20-alpine bukan node:latest
  • Lebih baik lagi, gunakan distroless image dari Google yang benar-benar minimal
  • Scan image secara berkala dengan Trivy atau Clair
# Contoh Dockerfile yang lebih aman
FROM node:20-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]

2. Jangan Jalanin Container sebagai Root

Ini salah satu mistake yang paling sering terjadi. Defaultnya, Docker container jalan sebagai root. Kalau attacker berhasil masuk, mereka punya akses root di container.

# Bad
FROM node:20
COPY . .
CMD ["node", "server.js"]

# Good
FROM node:20
RUN addgroup -g 1001 appgroup && \
    adduser -u 1001 -G appgroup -s /bin/sh -D appuser
COPY --chown=appuser:appgroup . .
USER appuser
CMD ["node", "server.js"]

3. Gunakan Secrets dengan Benar

Jangan pernah hardcode password atau API key di Dockerfile atau environment variable yang visible di container. Gunakan Docker secrets untuk production:

# docker-compose.yml
services:
  app:
    image: myapp:latest
    secrets:
      - db_password
      - api_key

secrets:
  db_password:
    file: ./secrets/db_password.txt
  api_key:
    file: ./secrets/api_key.txt

Atau lebih baik lagi, gunakan external secrets manager seperti HashiCorp Vault atau AWS Secrets Manager.

4. Batasi Resources

Tanpa limit, container bisa consume semua resources dan membuat sistem unresponsive. Ini juga mencegah container runaway yang bisa di-exploit.

docker run -d \
  --memory="512m" \
  --cpus="1.0" \
  --restart=on-failure:3 \
  myapp:latest

Di docker-compose:

services:
  app:
    image: myapp:latest
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 512M
        reservations:
          cpus: "0.5"
          memory: 256M

5. Read-Only Root Filesystem

Dengan read-only root, container tidak bisa menulis ke filesystem kecuali yang di-allow. Ini mencegah banyak attack vectors.

docker run --read-only --tmpfs /tmp myapp:latest

Tapi ingat, aplikasi yang perlu write ke filesystem harus pakai volume untuk temporary files.

6. Network Segmentation

Gunakan Docker network untuk isolation. Jangan expose semua port ke internet.

services:
  app:
    image: myapp:latest
    networks:
      - frontend
      - backend
  
  db:
    image: postgres:15
    networks:
      - backend
    volumes:
      - db-data:/var/lib/postgresql/data

networks:
  frontend:
  backend:

7. Regular Scanning dan Updates

Security bukan one-time setup. Lo perlu:

  • Scan images secara mingguan dengan CI/CD integration
  • Update base image secara regular
  • Monitor CVE databases untuk know vulnerabilities
  • Use automated tools seperti Snyk atau Anchore
# Contoh Trivy scan di CI/CD
trivy image --severity HIGH,CRITICAL myapp:latest

8. Logging dan Monitoring

Kamu perlu tau kalau ada yang salah. Setup logging yang proper:

docker run -d \
  --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

Gunakan juga tools seperti:

  • Docker Bench for Security — auto-audit host configuration
  • Falco — runtime security monitoring
  • Prometheus + Grafana — metrics dan visualization

Kesimpulan

Docker security butuh pendekatan berlapis. Satu langkah saja tidak cukup. Kombinasikan base image yang aman, user isolation, secrets management, resource limits, network segmentation, dan monitoring yang proper.

Ingat: container yang tidak diamankan = house with all windows open. Dont make it easy for attackers.

Mulai dari langkah kecil dulu. Cek Dockerfile lo sekarang, apakah masih jalan sebagai root? Kalau iya, fix itu dulu.