docker builder prune adalah perintah untuk menghapus cache build (lapisan/layers sementara) yang dihasilkan saat proses build image. Ini tidak menghapus container atau image yang sedang dipakai, tetapi jika digunakan tanpa strategi, dapat membuat build berikutnya menjadi lebih lambat karena cache perlu dibuat ulang.
Masalah
- Ruang disk cepat habis pada server build, runner CI/CD, atau laptop developer.
- Build baru gagal dengan error seperti no space left on device.
- Direktori Docker (mis.
/var/lib/docker) membengkak akibat cache lama yang tidak pernah dibersihkan.
Penyebab
- Sering melakukan build image dengan perubahan kecil → menghasilkan banyak layer cache.
- BuildKit menyimpan cache untuk mempercepat build berikutnya, namun cache lama tidak otomatis dibuang.
- Runner CI/CD membangun banyak project/multi-branch tanpa kebijakan retensi cache.
Solusi
Gunakan docker builder prune dengan filter dan kebijakan yang jelas.
Opsi Penting
-f/--force: lewati konfirmasi interaktif.-a/--all: hapus semua cache, bukan hanya yang dangling.--filter "until=<durasi>": hapus cache yang lebih tua dari durasi tertentu, contohuntil=24hatauuntil=168h(7 hari).--keep-storage <bytes>: pertahankan cache baru sampai batas minimum ruang yang ingin disisakan (contoh:--keep-storage 10GB).
Contoh Perintah Dasar
# Lihat pemakaian ruang Docker (cache, images, containers)
docker system df -v
# Hapus cache dangling saja (aman, default interaktif)
docker builder prune
# Hapus cache lebih tua dari 24 jam, tanpa prompt
docker builder prune --filter "until=24h" -f
# Hapus SEMUA cache build (agresif)
docker builder prune -a -f
# Hapus cache hingga menyisakan 10GB ruang cache yang paling baru
docker builder prune --keep-storage=10GB -f
Tips Praktik Terbaik
- Mulai dengan
--filter "until=24h"atauuntil=168h(mingguan) untuk keseimbangan antara ruang disk dan kecepatan build. - Hindari
-apada jam sibuk; gunakan saat low-traffic agar build pertama setelah prune tidak mengganggu tim. - Monitor ruang dengan
docker system df -vsebelum dan sesudah pruning. - Di runner CI/CD ephemeral, gunakan kebijakan agresif (boleh
-a) karena runner akan dibuang setelah job.
Contoh & Skenario
1) Pembersihan Terjadwal (Linux, cron)
# Jalankan prune setiap Minggu pukul 02:30, hapus cache lebih tua dari 7 hari
# Edit crontab: crontab -e
30 2 * * 0 /usr/bin/docker builder prune --filter "until=168h" -f >/var/log/docker-prune.log 2>&1
2) Integrasi di GitLab CI
# .gitlab-ci.yml (contoh job opsional untuk hygiene disk)
prune_cache:
stage: maintenance
image: docker:stable
services:
- docker:dind
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual
script:
- docker system df -v
- docker builder prune --filter "until=168h" -f
- docker system df -v
3) GitHub Actions (Self-Hosted Runner)
name: Docker Cache Hygiene
on:
workflow_dispatch:
schedule:
- cron: '30 2 * * 0'
jobs:
prune:
runs-on: self-hosted
steps:
- name: Check disk usage
run: docker system df -v
- name: Prune old build cache
run: docker builder prune --filter "until=168h" -f
4) Windows (Task Scheduler)
# Jalankan sebagai tugas terjadwal mingguan:
powershell -Command "docker builder prune --filter 'until=168h' -f"
5) Sebelum vs Sesudah
# Sebelum
$ docker system df -v
BUILD CACHE:
TYPE SIZE CREATED BY LAST USED
regular 8.5GB dockerfile: RUN npm ci 3 weeks ago
regular 3.2GB dockerfile: RUN apt-get install ... 10 days ago
...
# Prune cache lebih tua dari 7 hari
$ docker builder prune --filter "until=168h" -f
Deleted build cache objects: 12
Total reclaimed space: 8.5GB
# Sesudah
$ docker system df -v
BUILD CACHE:
TYPE SIZE CREATED BY LAST USED
regular 3.2GB dockerfile: RUN apt-get install ... 2 days ago
Risiko & Mitigasi
- Build pertama setelah prune bisa lebih lama karena cache harus dibuat ulang.
Mitigasi: jadwalkan di luar jam sibuk, gunakan filter waktu daripada-a. - Runner berbagi cache lintas project bisa kehilangan cache yang masih berguna.
Mitigasi: gunakan--keep-storageagar tetap menyisakan ruang cache terbaru.
Checklist Praktik Terbaik
- Otomasi pruning mingguan dengan
until=168hdi lingkungan build. - Gunakan
-ahanya pada runner sementara/ephemeral atau saat butuh ruang besar cepat. - Monitor disk:
docker system df -v+ alerting (Prometheus/Node Exporter) bila memungkinkan. - Optimalkan Dockerfile untuk cache yang efisien (urutkan perintah dari yang paling jarang berubah, pisahkan
apt-get update/installdengan tepat, gunakan.dockerignore).
docker builder prune menghapus image atau container?Tidak. Ia hanya membersihkan build cache. Untuk image/container gunakan perintah lain seperti
docker image prune atau docker system prune (lebih agresif).
Apa beda dengan docker system prune?
system prune menyapu luas (network dangled, images dangling, stopped containers, dll). builder prune fokus pada cache build saja — lebih aman untuk pipeline build.
Kapan sebaiknya pakai -a?
Ketika benar-benar kekurangan ruang atau di runner ephemeral. Untuk server build yang persist, lebih baik pakai filter waktu atau --keep-storage.
Kesimpulan
docker builder prune adalah cara cepat dan aman untuk mengendalikan pertumbuhan cache build Docker. Dengan memadukan --filter "until=...", --keep-storage, dan penjadwalan rutin, Anda bisa menjaga ruang disk tetap sehat tanpa mengorbankan produktivitas tim.