Haruskah saya khawatir tentang kontainer Docker yang berlebih dan tidak berjalan?

142

Setiap docker runperintah, atau setiap RUNperintah di dalam Dockerfile, membuat sebuah wadah. Jika wadah tidak lagi berjalan masih bisa dilihat docker ps -a.

Haruskah saya khawatir dengan memiliki daftar besar wadah yang tidak berjalan? Haruskah saya mengeluarkan docker rmpada wadah yang tidak berjalan?

Saya tidak yakin kinerja atau memori / memori penyimpanan apa yang dikenakan kontainer yang tidak berjalan ini.

velo9
sumber
1
Sebuah docker execperintah telah ditambahkan beberapa waktu lalu, lihat docs.docker.com/reference/commandline/cli/#exec - itu akan menjalankan perintah dari wadah berjalan.
schmunk
FYI, jika Anda ingin melihat cara menghapus wadah lama, lihat pertanyaan ini: stackoverflow.com/questions/17236796/…
Ryan Walls
1
@ schmunk Tautan telah dipindahkan. docs.docker.com/engine/reference/commandline/exec
akauppi

Jawaban:

72

Wadah yang tidak berjalan tidak mengambil sumber daya sistem selain ruang disk.

Biasanya baik untuk membersihkan setelah Anda sendiri, tetapi jika Anda memiliki banyak dari mereka duduk di sekitar itu seharusnya tidak memperlambat kinerja sama sekali.

Jika Anda melihat adanya pelambatan saat menjalankan perintah buruh pelabuhan dengan banyak kontainer yang terhenti, mungkin ada bug di buruh pelabuhan, dan Anda harus mengirimkan bug.

Ken Cochrane
sumber
1
Docs untuk RUNperintah sekarang telah pindah ke: docs.docker.io/en/latest/reference/builder/#run
aculich
63

The docker rundokumentasi menjelaskan cara otomatis membersihkan wadah dan menghapus sistem file ketika keluar wadah:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Di atas menunjukkan bahwa secara default wadah tidak dihapus, tetapi menambahkan --rm=trueatau hanya tulisan pendek --rmakan berfungsi seperti:

sudo docker run -i -t --rm ubuntu /bin/bash

Ketika Anda keluar dari wadah itu akan dihapus secara otomatis.

Anda dapat menguji ini dengan mendaftarkan wadah buruh pelabuhan Anda dalam satu jendela terminal:

watch -n1 'sudo ls -c /var/lib/docker/containers'

Dan kemudian di jendela lain jalankan perintah ini untuk menjalankan beberapa kontainer buruh pelabuhan yang semuanya akan secara otomatis keluar setelah tidur hingga 10 detik.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done
aculich
sumber
4
Bukan jawaban langsung untuk pertanyaan , tetapi jawaban yang menarik yang akan memberi pengguna beberapa wawasan tentang mekanisme di balik buruh pelabuhan. Terima kasih!
thaJeztah
3
-rmsudah usang dan akan dihapus pada suatu waktu, gunakan --rmsaja.
bain
5

Jika Anda menjalankan wadah dengan volume dan tidak menggunakan buruh pelabuhan rm -v untuk menghapusnya maka volume tidak dihapus setelah Anda menghapus wadah. Juga ada masalah dengan driver penyimpanan vfs. Jika Anda lupa membersihkan, volume akan memakan ruang disk Anda.

Zergood
sumber
2

Saya tidak yakin kinerja atau memori / memori penyimpanan apa yang dikenakan kontainer yang tidak berjalan ini.

Untuk menilai seberapa banyak penyimpanan yang tidak menggunakan wadah Docker gunakan, Anda dapat menjalankan:

docker ps --size --filter "status=exited"

Secara setara , Anda dapat menjalankan:docker container ls --filter "status=exited"

Anda juga dapat menggunakan perintah docker system df(diperkenalkan di Docker 1.13.0, Januari 2017) untuk melihat penggunaan disk docker, misalnya:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
Franck Dernoncourt
sumber