Docker memungkinkan Anda dengan cepat mengemas aplikasi Anda sebagai wadah, sehingga memungkinkan untuk menjalankannya di mana saja dari laptop Anda ke cloud publik. Setelah menggunakan Docker untuk sementara waktu, Anda dapat mengumpulkan sejumlah besar kontainer, gambar, dan sumber daya lainnya yang berlebihan. Berikut cara merapikannya.
Docker biasanya tidak menghapus apa pun kecuali Anda menyuruhnya. Itu berarti gambar yang Anda tarik dan wadah yang Anda buat mungkin masih berkeliaran di sistem Anda, meskipun tidak lagi digunakan.
Memiliki terlalu banyak sumber daya yang berlebihan dapat dengan cepat menyebabkan penggunaan disk yang berlebihan. Ini juga menghasilkan keluaran yang jauh lebih panjang saat mencantumkan sumber daya pada baris perintah, sehingga lebih sulit untuk menemukan informasi yang Anda cari.
Memotong Sumber Daya yang Menggantung
Sumber daya "menggantung" adalah objek Docker apa pun yang saat ini tidak terkait dengan wadah. Ini termasuk gambar Docker, jaringan dan volume, serta wadah yang dihentikan. Dalam hal gambar, gambar "menggantung" jika tidak ditandai dan tidak memiliki referensi.
Docker menyediakan satu perintah housekeeping untuk memungkinkan Anda membersihkan semua resource yang menggantung dan container yang dihentikan. Kecuali jika sumber daya digunakan oleh berjalan wadah, itu akan dihapus.
docker system prune
Menjalankan perintah akan menampilkan prompt konfirmasi yang mencantumkan jenis sumber daya yang akan dihapus. Ketik y
dan tekan Enter untuk melanjutkan penghapusan. Anda dapat menonaktifkan konfirmasi dengan meneruskan -f
atau --force
bendera.
Volume tidak dihapus secara default. Menghapus volume berisiko hilangnya data persisten yang mungkin ingin Anda simpan. Jika Anda ingin menghapus volume yang tidak terkait dengan penampung, teruskan --volumes
bendera untuk menyertakan mereka dalam operasi.
Anda dapat menghapus lebih banyak lagi data gambar dengan meneruskan -a
(atau --all
) bendera. Ini akan menyebabkan Docker menghapus semua yang tidak digunakan gambar, bukan hanya menjuntai yang tidak direferensikan. Setiap gambar di sistem Anda akan dihapus, kecuali ada setidaknya satu penampung berjalan yang memerlukannya.
Menggunakan Filter Saat Memangkas
Filter dapat digunakan dengan prune
memerintah. Pemfilteran memberi Anda lebih banyak kontrol atas apa yang akan dihapus. Dua filter saat ini didukung, until
dan timestamp
.
until
– Tandauntil
filter mencegah penghapusan wadah, gambar, dan jaringan yang dibuat sebelum waktu tertentu. Anda dapat menentukan waktu dalam beberapa format berbeda, seperti stempel waktu Unix dalam detik (mis.1614890000
) atau string stempel waktu berformat tanggal (mis.2021-03-04T20:30:00
).label
–label
filter membatasi penghapusan sehingga hanya sumber daya dengan label tertentu yang dihapus. Label dapat digunakan dengan wadah, gambar, jaringan, dan volume. Anda menentukan label sebagailabel=key=value
(kunci sama dengan nilai),label!=key=value
(kunci tidak sama dengan nilai),label=key
(memiliki label tertentu) ataulabel!=key
(tidak memiliki label yang diberikan).
Untuk menggunakan filter, teruskan ke --filter
bendera:
docker system prune --filter until=2021-03-04T20:30:00 --filter label=foo=bar
Perintah ini akan menghapus sumber daya dengan foo=bar
label yang dibuat sebelum 20:30 pada tanggal 4 Maret. Sumber daya apa pun yang tidak cocok dengan kriteria ini tidak akan tersentuh.
Memotong Jenis Sumber Daya Individual
Anda tidak perlu selalu menggunakan docker system prune
. Docker juga menyediakan perintah pemangkasan yang lebih terperinci. Ini dapat digunakan jika Anda hanya ingin menghapus satu jenis sumber daya.
--force
dan --filter
flags yang didukung oleh docker system prune
juga berlaku untuk masing-masing perintah prune yang tercantum di bawah ini.
Pemangkasan Wadah
Perintah Docker sehari-hari dapat dengan cepat menghasilkan sejumlah besar container yang dihentikan. Masalahnya bertambah jika Anda docker build
gambar tanpa --rm
flag, karena ini menyebabkan lapisan build perantara dipertahankan.
Jalankan docker container prune
untuk membersihkan wadah yang berhenti. Kontainer yang dihentikan tidak muncul saat Anda menjalankan docker ps
; untuk melihatnya, Anda harus menggunakan docker ps -a
untuk menampilkan semua container di sistem Anda.
Jika Anda ingin menghapus satu wadah, gunakan docker rm
perintah yang melewati ID wadah. Anda bisa mendapatkannya dengan menjalankan docker ps
. Jika penampung sedang berjalan, Anda harus menggunakan --force
tandai untuk menghapusnya.
Memotong Gambar
Gunakan docker image prune
untuk menghapus semua gambar yang menjuntai. Seperti docker system prune
, ini akan memengaruhi gambar yang tidak ditandai atau tidak dirujuk oleh penampung apa pun.
Tambahkan -a
tandai untuk menghapus semua gambar yang tidak digunakan. Ini akan menghapus setiap gambar di sistem Anda yang tidak diperlukan oleh setidaknya satu wadah. Gambar yang diberi tag juga akan disertakan, sehingga Anda dapat dengan cepat menghapus penarikan lama dari Docker Hub.
Anda dapat menghapus gambar tertentu dengan docker rmi
perintah:
docker rmi wordpress:latest
Ketika satu gambar memiliki beberapa tag, docker rmi
akan menghapus tag yang diberikan tanpa benar-benar menghapus gambar. Ini akan dihapus setelah tag terakhir dihapus.
Memotong Jaringan
Jaringan Docker tidak dibersihkan secara otomatis. Seiring waktu, Anda dapat berakhir dengan sejumlah besar dari mereka. Ini mengacaukan sistem Anda dengan perangkat jembatan virtual yang berlebihan dan entri tabel perutean. Jalankan docker network prune
untuk menghancurkan jaringan yang tidak digunakan dan mengembalikan perubahan ke konfigurasi host Anda.
Anda dapat menghapus jaringan individual dengan menjalankan docker rm my-network
.
Volume Pemangkasan
Docker tidak akan pernah menghapus volume. Mereka menyimpan data persisten yang dibuat oleh wadah Anda sehingga penghapusan yang tidak diinginkan dapat memiliki konsekuensi yang menghancurkan. Volume juga dapat digunakan bersama oleh beberapa wadah atau dibiarkan tidak aktif dan siap dipasang ke wadah lain di masa mendatang.
Jika Anda ingin memangkas volume yang tidak digunakan, Anda harus menjalankan docker volume prune
. Ini akan menghapus volume apa pun yang tidak digunakan oleh setidaknya satu wadah. Volume individual dapat dihapus menggunakan docker volume rm my-volume
.
Mencegah Akumulasi di Masa Mendatang
Anda dapat meminimalkan risiko penumpukan sumber daya yang berlebihan di masa mendatang dengan berhati-hati untuk meneruskan --rm
tandai ke docker build
dan docker run
perintah.
Saat digunakan dengan build
, itu akan menyebabkan penghapusan lapisan build perantara (ditandai sebagai <none>:<none>
dalam docker images
) keluaran. Ini dapat mewakili pengurangan yang signifikan dalam penggunaan disk. Lapisan perantara baru biasanya dibuat untuk setiap instruksi di Dockerfile
Anda . Anda biasanya dapat menghapusnya kecuali jika Anda ingin menggunakannya nanti sebagai titik awal untuk gambar baru.
Menggunakan --rm
dengan docker run
akan menghapus wadah segera setelah perintahnya keluar. Ini sangat ideal saat menjalankan biner dalam wadah sekali pakai. Jangan lulus --rm
ke container yang ingin Anda jalankan terus-menerus, atau yang mungkin ingin Anda mulai dan hentikan sesuai permintaan. Contohnya termasuk server web dan database yang menjalankan layanan alih-alih perintah yang disediakan pengguna.
Kesimpulan
Memangkas sumber daya Docker Anda dapat mengosongkan ruang disk dan membantu Anda bekerja dengan CLI Docker. Menghilangkan penampung dan gambar yang berlebihan memudahkan mengidentifikasi sumber daya yang Anda cari.
Docker tidak akan menghapus apa pun kecuali Anda menyuruhnya. Sebaiknya jalankan docker system prune
secara berkala untuk menjaga sistem Anda tetap bersih. Anda dapat membuat tugas cron yang menjalankannya setiap bulan, menggunakan until
filter untuk membuat periode retensi untuk sumber daya yang baru saja ditambahkan.