docker run: mengapa menggunakan --rm (docker newbie)

105

Saya mencoba buruh pelabuhan untuk pertama kalinya dan belum memiliki "model mental". Total pemula.

Semua contoh yang saya lihat telah menyertakan --rmbendera untuk dijalankan, seperti

docker run -it --rm ...
docker container run -it --rm ...

Pertanyaan:

Mengapa perintah ini menyertakan --rmbendera? Saya akan berpikir bahwa jika saya mengalami masalah dalam menyiapkan atau mengunduh wadah dengan barang bagus di dalamnya, mengapa harus menghapusnya? Saya ingin menyimpannya untuk digunakan lagi.

Jadi, saya tahu saya salah paham tentang buruh pelabuhan.

matchingmoments
sumber
5
--rmmenghapus penampung yang dihentikan (yang dibuat docker run), bukan gambarnya (apa yang Anda unduh).
Ry-
docker run --helpsemestinya bermanfaat. Jika Anda tidak ingin menghapus kontainer , Anda dapat meneruskannya
indapublic
1
itu harus --rmdan itu untuk secara otomatis membersihkan penampung dan menghapus sistem file saat penampung keluar dan itu tidak berarti menghapus barang dari penampung.
Mahattam
2
Anda tidak mengunduh kontainer, Anda mengunduh gambar. Baca di sini untuk mempelajari perbedaan antara gambar dan penampung: docs.docker.com/engine/docker-overview/#docker-objects
axiac

Jawaban:

95

Penampung hanyalah contoh gambar yang Anda gunakan untuk menjalankannya. Kondisi pikiran saat membuat aplikasi dalam container bukanlah dengan mengambil container ubuntu yang segar dan bersih misalnya, dan mendownload aplikasi dan konfigurasi yang Anda inginkan di dalamnya, dan kemudian membiarkannya berjalan.

Anda harus memperlakukan kontainer sebagai instance aplikasi Anda, tetapi aplikasi Anda disematkan ke dalam gambar. Penggunaan yang tepat akan membuat gambar khusus, di mana Anda menyematkan semua file, konfigurasi, variabel lingkungan, dll, ke dalam gambar. Baca lebih lanjut tentang Dockerfile dan cara melakukannya di sini

Setelah Anda melakukannya, Anda memiliki gambar yang berisi segalanya, dan untuk menggunakan aplikasi Anda, Anda cukup menjalankan gambar dengan pengaturan port yang tepat atau variabel dinamis lainnya, menggunakan docker run <your-image>

Menjalankan container dengan --rmflag bagus untuk container yang Anda gunakan sangat singkat hanya untuk menyelesaikan sesuatu, misalnya, mengompilasi aplikasi Anda di dalam container, atau hanya menguji sesuatu yang berhasil, dan kemudian Anda tahu itu adalah container berumur pendek dan Anda beri tahu daemon Docker Anda bahwa setelah selesai berjalan, hapus semua yang terkait dengannya dan hemat ruang disk.

buddy123
sumber
Akan meneruskan variabel lingkungan untuk menjalankan buruh pelabuhan menjadi alternatif yang lebih baik. Dengan cara ini Anda dapat memulai dengan konfigurasi yang berbeda (mis. Produksi versus praproduksi)?
SCO
Lingkungan Prod vs Test adalah contoh yang baik di mana Anda mungkin ingin menggunakan env vars untuk membuat pemisahan dan menjalankan aplikasi Anda dari gambar yang sama, tetapi dengan pengaturan yang berbeda untuk setiap env
buddy123
Apakah ada cara untuk secara otomatis menghapus kontainer yang mulai digunakan --rmsaat pengguna menutup jendela terminal. yaitu tidak sengaja dijalankan exitdi shell kontainer, tetapi hanya menutup jendela GUI terminal. Saya perhatikan bahwa kontainer tidak dihapus dalam kasus ini.
venkrao
20

Bendera --rmdigunakan saat Anda memerlukan penampung untuk dihapus setelah tugasnya selesai.

Ini cocok untuk pengujian kecil atau tujuan POC dan menghemat sakit kepala untuk pekerjaan rumah tangga.

Adnan Khan
sumber
16

dari https://docs.docker.com/engine/reference/run/#clean-up---rm

Secara default, sistem file penampung tetap ada bahkan setelah penampung keluar. Ini membuat proses debug jauh lebih mudah (karena Anda dapat memeriksa status akhir) dan Anda menyimpan semua data Anda secara default. Tetapi jika Anda menjalankan proses latar depan jangka pendek, sistem file kontainer ini benar-benar dapat menumpuk. Jika sebaliknya Anda ingin Docker secara otomatis membersihkan container dan menghapus sistem file saat container keluar, Anda dapat menambahkan --rm flag

Dengan kata kecil: sangat berguna untuk menjaga kebersihan host dari kontainer yang berhenti dan tidak digunakan.

Sandro Modarelli
sumber
1

Saya gunakan --rmsaat menghubungkan ke menjalankan kontainer untuk melakukan beberapa tindakan seperti backup database atau menyalin file. Berikut ini contohnya:

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

Di atas akan menghubungkan wadah yang sedang berjalan bernama 'app_postgres_1' dan membuat cadangan. Setelah perintah pencadangan selesai, penampung dihapus sepenuhnya.

Shoan
sumber