---
title: "Cara Membersihkan Image dan Volume Docker yang Menumpuk"
description: "Disk VPS penuh oleh Docker? Cek pemakaian dengan docker system df, lalu bersihkan image, container, build cache, volume, dan log dengan aman."
url: "https://nivelva.com/insight/cara-membersihkan-image-volume-docker-menumpuk"
category: "Server \u0026 Infrastruktur"
tags: ["docker","disk penuh","prune","vps","linux"]
author: "Theresia Candiawan"
published: "2026-11-07T04:23:00+07:00"
updated: "2026-11-07T04:23:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Membersihkan Image dan Volume Docker yang Menumpuk

> **Jawaban singkat:** Mulai dengan docker system df untuk melihat bagian yang paling boros, lalu bersihkan bertahap dengan docker image prune, docker builder prune, dan docker container prune. Volume dibersihkan paling akhir dan hati-hati, dan log container dibatasi lewat daemon.json.

Cara paling aman membersihkan Docker adalah melihat dulu apa yang memakan disk dengan `docker system df`, lalu menghapus bertahap: image tak terpakai, build cache, container mati, dan baru terakhir volume. Jangan langsung menjalankan perintah prune paling agresif.

Kenapa ini penting? Docker tidak pernah membuang apa pun secara otomatis. Setiap `docker pull` versi baru, setiap build, dan setiap container uji coba meninggalkan sisa. Di VPS dengan disk terbatas, sisa ini bisa membuat disk penuh, dan disk penuh bisa membuat database berhenti menulis atau layanan gagal start.

## Apa yang paling banyak memakan disk?

Jalankan:

```
docker system df
```

Hasilnya memisahkan empat kelompok: Images, Containers, Local Volumes, dan Build Cache, lengkap dengan kolom RECLAIMABLE (bisa dibebaskan). Untuk rincian per item, tambahkan `-v`:

```
docker system df -v
```

Cocokkan dengan pemakaian disk sistem:

```
df -h
sudo du -sh /var/lib/docker
```

Kalau angka `/var/lib/docker` jauh lebih besar dari total di `docker system df`, kemungkinan besar penyebabnya adalah file log container, yang dibahas di bawah.

## Perintah pembersih dan apa yang dihapus

| Perintah | Yang dihapus | Risiko |
|:--|:--|:--|
| `docker container prune` | Container yang sudah berhenti | Rendah, kecuali container berhenti itu masih kamu butuhkan |
| `docker image prune` | Image dangling (tanpa tag) | Rendah |
| `docker image prune -a` | Semua image yang tidak dipakai container mana pun | Sedang, image harus ditarik ulang bila dibutuhkan |
| `docker builder prune` | Build cache | Rendah, build berikutnya lebih lama |
| `docker volume prune` | Volume anonim yang tidak dipakai | Tinggi bila ada data di dalamnya |
| `docker volume prune -a` | Semua volume tidak terpakai, termasuk bernama | Sangat tinggi |
| `docker system prune` | Container berhenti, network tak terpakai, image dangling, build cache | Rendah sampai sedang |

Semua perintah di atas meminta konfirmasi kecuali diberi `-f`. Baca ringkasan yang ditampilkan sebelum menjawab `y`.

## Urutan membersihkan yang aman

### 1. Hapus container yang sudah berhenti

```
docker ps -a --filter status=exited
docker container prune
```

Periksa daftarnya dulu. Container yang berhenti kadang masih menyimpan data di lapisan tulisnya.

### 2. Hapus image yang tidak dipakai

```
docker image prune -a --filter "until=168h"
```

Filter `until=168h` hanya menghapus image yang dibuat lebih dari tujuh hari lalu. Image versi sebelumnya yang baru diganti tetap ada sebagai cadangan rollback.

### 3. Bersihkan build cache

Bila server dipakai untuk `docker build`, build cache sering menjadi penyumbang terbesar:

```
docker builder prune
```

Tambahkan `-a` untuk menghapus seluruh cache, bukan hanya yang tidak terpakai.

### 4. Periksa volume satu per satu

```
docker volume ls -f dangling=true
```

Daftar ini berisi volume yang tidak terpasang ke container mana pun. Sebelum menghapus, intip isinya:

```
docker run --rm -v nama-volume:/data alpine ls -la /data
```

Hapus yang benar-benar tidak dibutuhkan dengan `docker volume rm nama-volume`. Mengetik nama satu per satu memang lebih lambat, tapi jauh lebih aman daripada prune massal.

> **Volume database yang sedang tidak berjalan:**
>
> Volume dianggap "tidak terpakai" bila tidak ada container yang memakainya, termasuk saat kamu baru saja menjalankan `docker compose down`. Menjalankan `docker volume prune -a` pada saat itu bisa menghapus database produksi. Pastikan semua layanan penting sedang aktif, atau backup dulu.

Sejak Docker Engine 23.0, `docker volume prune` tanpa opsi hanya menghapus volume anonim. Volume bernama baru ikut dihapus bila memakai `-a`. Di versi lama, perilakunya berbeda, jadi cek versimu dengan `docker version`.

## Bagaimana dengan log container yang membengkak?

Driver log bawaan Docker (`json-file`) menulis log setiap container ke `/var/lib/docker/containers/<id>/` tanpa batas ukuran. Aplikasi yang cerewet bisa menghasilkan log berukuran besar dalam beberapa minggu.

Batasi lewat `/etc/docker/daemon.json`:

```
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
```

Lalu `sudo systemctl restart docker`. Setelan ini hanya berlaku untuk container yang dibuat setelahnya, jadi buat ulang container lama (misalnya dengan `docker compose up -d --force-recreate`). Di Compose, batas yang sama juga bisa ditulis per layanan lewat kunci `logging`.

Jangan menghapus file di dalam `/var/lib/docker` secara manual. Docker menyimpan metadata yang bisa rusak bila file dihapus di luar perintah resminya.

## Bagaimana mencegah sampah menumpuk lagi?

Membersihkan sekali hanya menyelesaikan gejala. Beberapa kebiasaan kecil membuat disk tetap lega:

- **Pakai tag versi yang jelas.** Image dengan tag tetap lebih mudah dilacak dan dihapus daripada tumpukan image `latest` yang kehilangan tag (dangling) setiap kali ditarik ulang.
- **Gunakan `docker run --rm`** untuk container sekali pakai, seperti perintah backup atau uji coba, agar container langsung terhapus saat selesai.
- **Pisahkan server build dan server produksi** bila memungkinkan. Build cache paling banyak tumbuh di mesin yang sering menjalankan `docker build`.
- **Pakai multi-stage build** dan image dasar yang ramping supaya ukuran image akhir lebih kecil.
- **Pantau disk** dengan peringatan sederhana, misalnya skrip yang mengirim notifikasi bila pemakaian `df` melewati 80%.

## Perlukah dijadwalkan otomatis?

Untuk image dan build cache, ya. Contoh baris cron mingguan yang konservatif:

```
0 3 * * 0 docker image prune -af --filter "until=168h" && docker builder prune -f --filter "until=168h"
```

Volume sebaiknya tidak dimasukkan ke jadwal otomatis. Biarkan keputusan menghapus data tetap di tanganmu. Saat memperbarui container, ikuti juga urutan di [update container Docker tanpa kehilangan data](https://nivelva.com/insight/cara-update-container-docker-kehilangan-data) supaya tidak ada volume penting yang terlepas dari container-nya.

Kalau setelah dibersihkan disk tetap cepat penuh, mungkin memang ukuran disknya sudah tidak sesuai beban. Pertimbangannya ada di [memilih spesifikasi VPS](https://nivelva.com/insight/memilih-spesifikasi-vps), dan kebiasaan lain yang memicu masalah serupa dibahas di [kesalahan umum Docker di produksi](https://nivelva.com/insight/kesalahan-docker-di-produksi).

## Pertanyaan yang sering diajukan

### Apakah docker system prune menghapus volume?

Tidak, kecuali kamu menambahkan opsi --volumes. Tanpa opsi itu, volume tetap aman.

### Kenapa disk tidak berkurang setelah menghapus image?

Lapisan image bisa dipakai bersama oleh beberapa image atau container yang masih ada. Cek ulang dengan docker system df -v, dan periksa juga ukuran file log container.

### Apakah aman menjalankan prune saat container sedang berjalan?

Ya. Prune tidak menyentuh container yang berjalan maupun image dan volume yang dipakainya.

## Sumber

- <https://docs.docker.com/engine/manage-resources/pruning/>
- <https://docs.docker.com/reference/cli/docker/volume/prune/>
- <https://docs.docker.com/engine/logging/drivers/json-file/>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-membersihkan-image-volume-docker-menumpuk
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
