Cara Membersihkan Docker Images dan Volumes yang Tidak Digunakan

Cara Membersihkan Docker Images dan Volumes yang Tidak Digunakan

Pengenalan kepada Docker Cleanup

Pernahkah anda perasan ruang storan pada pelayan atau komputer riba anda tiba-tiba menjadi penuh walaupun anda tidak memasang perisian besar yang baru? Jika anda seorang pembangun perisian atau sysadmin yang menggunakan Docker, kemungkinan besar puncanya adalah timbunan imej, kontena, dan volume yang tidak lagi digunakan. Docker mempunyai kecenderungan untuk menyimpan segala-galanya, termasuk lapisan imej lama yang sudah tidak relevan selepas anda melakukan kemas kini kod.

Melakukan docker cleanup secara berkala bukan sekadar tentang mengosongkan ruang cakera, tetapi ia juga membantu meningkatkan prestasi sistem secara keseluruhan. Apabila terlalu banyak sumber yang tidak aktif tersimpan, proses pencarian imej atau pengurusan kontena boleh menjadi perlahan. Ramai pengguna baru sering terlepas pandang tentang bagaimana Docker menguruskan storan, menyebabkan mereka terkejut apabila melihat fail sistem membesar sehingga berpuluh-puluh gigabait.

Dalam panduan ini, saya akan kongsikan langkah demi langkah bagaimana anda boleh membersihkan sumber Docker yang tidak digunakan dengan selamat. Kita akan melihat cara membuang imej yang tergantung, memadam volume yang terbiar, dan menggunakan arahan automatik yang disediakan oleh Docker untuk memudahkan kerja penyelenggaraan anda.

Mengapa Docker Cleanup Sangat Penting?

Docker menggunakan konsep lapisan (layers) untuk membina imej. Setiap kali anda mengubah Dockerfile dan membina semula imej tersebut, Docker akan mencipta lapisan baru. Imej lama yang tidak lagi mempunyai tag atau tidak digunakan oleh mana-mana kontena akan menjadi apa yang dipanggil sebagai dangling images. Jika dibiarkan, imej-imej ini akan memakan ruang storan yang sangat besar tanpa memberi sebarang manfaat.

Selain imej, volume juga merupakan penyumbang utama kepada pembaziran ruang. Volume dicipta untuk menyimpan data secara kekal, namun apabila kontena dipadamkan, volume tersebut tidak dipadamkan secara automatik. Ini adalah ciri keselamatan untuk mengelakkan kehilangan data, tetapi ia menjadi masalah apabila anda kerap melakukan eksperimen dengan pelbagai pangkalan data atau aplikasi.

Pengurusan storan yang lemah pada pelayan produksi boleh menyebabkan sistem terhenti (crash) secara tiba-tiba apabila cakera keras mencapai kapasiti 100%. Oleh itu, rutin pembersihan adalah wajib bagi setiap pengamal DevOps.

Jika anda menguruskan pelayan web sendiri, anda mungkin memerlukan bantuan profesional untuk memastikan infrastruktur anda sentiasa optimum. Anda boleh melihat servis web hosting Malaysia yang menawarkan pengurusan pelayan yang lebih stabil dan efisien.

Cara Membersihkan Docker Images yang Tidak Digunakan

Langkah pertama dalam proses docker cleanup adalah dengan menangani imej. Terdapat dua jenis imej yang biasanya memenuhi storan: imej yang tergantung (dangling) dan imej yang tidak digunakan langsung oleh mana-mana kontena.

Membuang Dangling Images

Imej tergantung adalah imej yang tidak mempunyai nama atau tag. Ini biasanya berlaku apabila anda membina imej baru dengan tag yang sama seperti imej lama. Imej lama tersebut akan kehilangan tagnya dan menjadi “dangling”.

Untuk membuang semua imej tergantung, gunakan arahan berikut:

docker image prune

Apabila anda menjalankan arahan ini, Docker akan meminta pengesahan sebelum memadam. Jika anda ingin memadam tanpa perlu menjawab pengesahan, anda boleh menambah flag -f atau --force.

Membuang Semua Imej yang Tidak Digunakan

Ada kalanya, anda mempunyai imej yang mempunyai tag tetapi sudah tidak digunakan oleh mana-mana kontena yang sedang berjalan atau terhenti. Untuk membersihkan semua imej yang tidak aktif, gunakan arahan:

docker image prune -a

Flag -a bermaksud “all”. Ini akan memadamkan semua imej yang tidak dikaitkan dengan sekurang-kurangnya satu kontena. Berhati-hati dengan arahan ini kerana anda perlu memuat turun semula imej tersebut dari Docker Hub jika anda memerlukannya semula pada masa hadapan.

Menguruskan Docker Volumes yang Terbiar

Volume adalah bahagian yang paling sukar dibersihkan kerana Docker sangat berhati-hati agar tidak memadam data pengguna. Namun, selepas beberapa bulan pembangunan, anda mungkin mempunyai berpuluh-puluh volume yang tidak lagi mempunyai kaitan dengan mana-mana kontena.

Mengenal Pasti Volume yang Tidak Digunakan

Sebelum memadam, anda boleh menyenaraikan semua volume yang ada dengan arahan:

docker volume ls

Namun, senarai ini tidak memberitahu anda volume mana yang tidak digunakan. Untuk membersihkan semua volume yang tidak terikat dengan kontena, gunakan arahan khusus ini:

docker volume prune

Langkah ini sangat efektif untuk mengosongkan ruang cakera yang besar, terutamanya jika anda sering menggunakan pangkalan data seperti MySQL atau PostgreSQL dalam kontena.

Memadam Volume Secara Spesifik

Jika anda tahu nama volume yang ingin dibuang, anda tidak perlu melakukan pembersihan menyeluruh. Anda boleh memadamnya secara individu:

docker volume rm nama_volume

Contohnya, jika anda mempunyai volume bernama test_db_data yang sudah tidak diperlukan, jalankan docker volume rm test_db_data.

Strategi Pembersihan Menyeluruh dengan Docker System Prune

Jika anda tidak mahu menjalankan arahan satu per satu untuk imej, kontena, dan network, Docker menyediakan satu arahan “sakti” yang boleh membersihkan hampir semua sumber yang tidak digunakan dalam satu masa.

Menggunakan Docker System Prune

Arahan docker system prune akan memadamkan:

  • Semua kontena yang telah terhenti (stopped containers).
  • Semua network yang tidak digunakan oleh sekurang-kurangnya satu kontena.
  • Semua dangling images.
  • Semua cache build yang tidak diperlukan.

Untuk menjalankan pembersihan yang lebih agresif termasuk volume, anda boleh menambah flag --volumes:

docker system prune --volumes

Berikut adalah perbandingan antara arahan pembersihan yang biasa digunakan:

Arahan Apa yang Dipadamkan? Tahap Risiko
docker image prune Hanya imej tergantung (dangling) Rendah
docker image prune -a Semua imej yang tidak digunakan Sederhana
docker volume prune Semua volume yang tidak terikat Tinggi (Kehilangan Data)
docker system prune Kontena terhenti, network, imej tergantung Sederhana
docker system prune -a --volumes Hampir semua sumber yang tidak aktif Tinggi

Tips Tambahan untuk Mengelakkan Penimbunan Data

Selain melakukan docker cleanup secara manual, anda boleh mengambil langkah pencegahan agar storan anda tidak cepat penuh.

Gunakan Flag –rm Semasa Menjalankan Kontena

Apabila anda menjalankan kontena untuk tujuan ujian atau tugasan sementara, gunakan flag --rm. Ini akan memberitahu Docker untuk memadam kontena tersebut secara automatik sebaik sahaja ia berhenti.

Contoh: docker run --rm ubuntu bash

Dengan cara ini, anda tidak akan mempunyai senarai panjang kontena berstatus “Exited” yang memakan ruang.

Hadkan Log Kontena

Secara lalai, Docker menyimpan log kontena tanpa had. Jika aplikasi anda menghasilkan banyak log, fail log ini boleh membesar sehingga beberapa gigabait. Anda boleh mengehadkan saiz log dalam fail daemon.json:

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

Ini bermakna Docker hanya akan menyimpan maksimum 3 fail log dengan saiz 10MB setiap satu.

Automasi Pembersihan dengan Cron Job

Bagi pelayan produksi, anda boleh menetapkan cron job untuk menjalankan pembersihan secara automatik setiap minggu. Contohnya, anda boleh menetapkan docker system prune -f untuk berjalan setiap hari Ahad jam 3 pagi. Ini memastikan pelayan anda sentiasa bersih tanpa perlu campur tangan manual.

Jika anda rasa pengurusan teknikal seperti ini terlalu rumit, anda mungkin ingin mempertimbangkan website maintenance packages untuk memastikan semua aspek teknikal laman web dan pelayan anda dijaga oleh pakar.

Kesimpulan

Melakukan docker cleanup adalah amalan penting bagi setiap pengguna Docker untuk memastikan kestabilan sistem dan pengurusan storan yang efisien. Dengan memahami perbezaan antara imej tergantung, volume terbiar, dan kontena terhenti, anda boleh memilih kaedah pembersihan yang paling sesuai dengan keperluan anda.

Ingatlah untuk sentiasa berhati-hati apabila menggunakan arahan prune --volumes kerana data yang telah dipadamkan tidak boleh dikembalikan. Amalan terbaik adalah dengan melakukan backup data penting sebelum menjalankan pembersihan menyeluruh. Dengan disiplin dalam menguruskan sumber Docker, aliran kerja pembangunan anda akan menjadi lebih lancar dan pantas.

Untuk maklumat lanjut mengenai pembangunan web dan penyelesaian infrastruktur digital, anda boleh melayari Ewallz Solutions.

Soalan Lazim (FAQ)

Adakah arahan docker system prune akan memadamkan kontena yang sedang berjalan?

Tidak. Arahan docker system prune hanya akan memadamkan kontena yang telah terhenti (stopped). Kontena yang sedang aktif (running) tidak akan disentuh.

Bagaimana cara untuk melihat berapa banyak ruang yang digunakan oleh Docker?

Anda boleh menggunakan arahan docker system df. Arahan ini akan memberikan ringkasan tentang jumlah ruang yang digunakan oleh imej, kontena, volume, dan cache build.

Adakah selamat untuk memadam semua dangling images?

Ya, sangat selamat. Imej tergantung adalah imej yang tidak lagi mempunyai tag dan biasanya merupakan sisa daripada proses build yang gagal atau dikemas kini. Ia tidak memberi manfaat kepada sistem anda.

Kenapa volume saya tidak terpadam walaupun saya sudah memadam kontena?

Ini adalah ciri sengaja daripada Docker. Volume direka untuk menyimpan data secara kekal (persistent). Jika Docker memadam volume secara automatik setiap kali kontena dipadam, anda berisiko kehilangan data pangkalan data atau fail konfigurasi penting.

Bolehkah saya memulihkan imej yang telah dipadam menggunakan prune?

Tidak. Sebaik sahaja arahan prune dijalankan dan imej dipadamkan, ia tidak boleh dikembalikan. Anda perlu membina semula imej tersebut daripada Dockerfile atau memuat turunnya semula dari registry seperti Docker Hub.

Share this post

Leave a Reply

Your email address will not be published. Required fields are marked *


Open chat
Powered by