Hardening Docker Container: Panduan Lengkap & Mudah untuk Pemula

Apa Itu Hardening Docker?
Hardening Docker artinya memperkuat keamanan container agar tidak mudah diretas atau disalahgunakan. Docker sangat membantu dalam deploy aplikasi, tapi kalau tidak diamankan, bisa jadi celah bagi attacker.
Panduan ini akan menjelaskan praktik-praktik terbaik hardening Docker dengan bahasa sederhana, cocok untuk pemula DevOps atau siapa pun yang baru belajar Docker.
1. Pakai Base Image yang Kecil dan Aman 🏗️
Gunakan image seperti alpine
, ubuntu-minimal
, atau distroless
. Semakin kecil image, semakin sedikit celah keamanannya.
Contoh Dockerfile:
FROM alpine:latest
Kenapa penting? Karena image besar sering bawa banyak paket yang tidak dipakai tapi bisa jadi lubang keamanan.
2. Jangan Jalankan Sebagai Root 🙅♂️
Secara default, container pakai user root. Bahaya kalau container diretas.
Solusi: Tambahkan user non-root di Dockerfile.
RUN addgroup -S app && adduser -S app -G app
USER app
3. Scan Image dari Celah Keamanan 🔍
Gunakan tools seperti Trivy untuk mendeteksi celah (vulnerabilities).
Cara pakai Trivy:
trivy image nama-image-kamu
4. Jangan Pakai Tag latest
📌
Tag latest
bisa berubah-ubah, bikin build tidak konsisten.
Contoh salah:
FROM node:latest
Contoh benar:
FROM node:18.16.0
5. Batasi Resource Container 📉
Biar satu container tidak menghabiskan semua RAM/CPU server.
Contoh:
docker run --memory="256m" --cpus="0.5" app
6. Buat Filesystem Jadi Read-Only 🔒
Supaya container tidak bisa nulis ke sistem file (kecuali memang perlu).
Contoh:
docker run --read-only app
7. Buang File/Library yang Tidak Dipakai ✂️
Pakai multi-stage build, jadi cuma bawa hasil akhir ke image production.
Contoh:
FROM golang:alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine:latest
COPY --from=builder /app/app /app
ENTRYPOINT ["/app"]
8. Rutin Update Image 🔄
Update image atau rebuild secara berkala supaya dapat patch keamanan terbaru.
Tips: Pakai CI/CD pipeline yang build ulang otomatis misalnya tiap minggu.
9. Simpan Password Secara Aman 🔐
Jangan hardcode password di Dockerfile atau .env
. Pakai secret manager!
Contoh:
- Docker Swarm:
docker secret
- Kubernetes: pakai
Secret
object - Vault, AWS Secrets Manager, dsb
10. Monitor Aktivitas Container 📊
Gunakan tools seperti:
- Falco: deteksi aktivitas mencurigakan
- Promtail + Grafana Loki: pantau log container
11. Jangan Pakai Mode Jaringan host
🌐
Mode ini membuat container share IP dengan host, bisa jadi bahaya.
Solusi:
Gunakan bridge
network (default Docker) atau overlay jika pakai Swarm/K8s.
12. Kurangi Hak Istimewa Container ⚙️
Jangan kasih semua kemampuan Linux ke container.
Contoh:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE app
13. Gunakan Profil Keamanan Linux (seccomp, AppArmor) 🧱
Docker punya profil seccomp
default untuk batasi syscall berbahaya.
Contoh:
docker run --security-opt seccomp=default.json app
14. Matikan Fitur Tidak Penting ❌
Kalau tidak butuh fitur seperti Content Trust, matikan aja.
Contoh:
DOCKER_CONTENT_TRUST=0 docker pull app
15. Gunakan Registry Pribadi 🗂️
Upload image ke registry sendiri seperti:
- GitHub Container Registry
- AWS ECR
- Docker Registry lokal
Ini lebih aman dan kamu bisa kontrol aksesnya.
Kesimpulan
Docker itu powerful, tapi juga rawan kalau Tidak dijaga keamanannya. Praktik-praktik di atas adalah langkah awal yang sangat penting buat DevOps dan engineer pemula supaya deployment makin aman.
Thanks mas