docker run: neden --rm kullanmalısınız (docker newbie)


114

Docker'ı ilk kez deniyorum ve henüz bir "zihinsel modele" sahip değilim. Toplam başlangıç.

Baktığım tüm örnekler, --rmçalıştırılacak bayrağı içeriyordu , örneğin

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

Soru:

Bu komutlar neden --rmbayrağı içerir? İçinde iyi şeyler olan bir kapsayıcı kurma veya indirme zahmetine katılırsam, neden onu kaldıralım? Tekrar kullanmaya devam etmesini istiyorum.

Yani, docker konusunda yanlış bir fikrim olduğunu biliyorum.


6
--rmdocker runtemel aldığı görüntüyü (indirdiğiniz) değil , durdurulan kapsayıcıyı ( oluşturulan) kaldırır .
Ry-

docker run --helpfaydalı olmalı. Kapsayıcıyı kaldırmak istemiyorsanız , geçirebilirsiniz
indapublic

1
olması gerekir --rmve bu, kabı otomatik olarak temizlemek ve kap çıktığında dosya sistemini kaldırmaktır ve bu, malzemeleri kaptan çıkarmak anlamına gelmez.
Mahattam

2
Kapları indirmiyorsunuz, görüntüleri indiriyorsunuz. Görüntüler ve kapsayıcılar arasındaki farkları öğrenmek için burayı okuyun: docs.docker.com/engine/docker-overview/#docker-objects
axiac

Yanıtlar:


101

Kapsayıcılar, onları çalıştırmak için kullandığınız görüntünün yalnızca bir örneğidir. Kapsayıcıya alınmış bir uygulama oluştururken zihin durumu, örneğin taze, temiz bir ubuntu kapsayıcı alıp, içinde olmasını istediğiniz uygulamaları ve yapılandırmaları indirip ardından çalışmasına izin vermek değildir.

Konteyneri uygulamanızın bir örneği olarak değerlendirmelisiniz, ancak uygulamanız bir görüntünün içine gömülüdür. Doğru kullanım, tüm dosyalarınızı, yapılandırmalarınızı, ortam değişkenlerinizi vb. Görüntüye yerleştirdiğiniz özel bir görüntü oluşturmak olacaktır. Dockerfile hakkında daha fazlasını okuyun ve nasıl yapılır burada

Bunu yaptıktan sonra, her şeyi içeren bir görüntünüz olur ve uygulamanızı kullanmak için görüntüyü sadece uygun bağlantı noktası ayarları veya diğer dinamik değişkenlerle çalıştırırsınız. docker run <your-image>

Kapları --rmbayrakla çalıştırmak , yalnızca bir şeyi başarmak için çok kısa bir süre kullandığınız kaplar için iyidir, örneğin, uygulamanızı bir kap içinde derlemek veya sadece çalıştığı bir şeyi test etmek için ve sonra onun kısa ömürlü bir kabı olduğunu anlarsınız ve siz Docker daemon'unuza, çalışması bittiğinde, onunla ilgili her şeyi sileceğini ve disk alanından tasarruf edeceğini söyleyin.


Ortam değişkenlerini docker çalışmasına geçirmek daha iyi bir alternatif olabilir mi? Bu şekilde farklı konfigürasyonlarla başlayabilirsiniz (örn. Üretime karşı ön üretim)?
SCO

Prod vs Test ortamı, ayırma yapmak ve uygulamanızın aynı görüntüden, ancak her ortam için farklı ayarlarla çalışmasını sağlamak için muhtemelen env değişkenlerini kullanmak isteyeceğiniz iyi bir örnektir
buddy123

Kullanıcı --rmterminal penceresini kapattığında kullanmaya başlayan konteynerleri otomatik olarak silmenin bir yolu var mı ? yani, kasıtlı exitolarak konteyner kabuğunda çalıştırılmaz , sadece terminal GUI penceresini kapatır. Bu durumda kapsayıcıların silinmediğini fark ettim.
venkrao

20

Bayrak --rm, görev tamamlandıktan sonra kabın silinmesi gerektiğinde kullanılır.

Bu, küçük testler veya POC amaçları için uygundur ve ev bakımı için baş ağrısından kurtarır.


16

Gönderen https://docs.docker.com/engine/reference/run/#clean-up---rm

Varsayılan olarak, bir konteynerin dosya sistemi, konteyner çıktıktan sonra bile devam eder. Bu, hata ayıklamayı çok daha kolay hale getirir (çünkü son durumu inceleyebilirsiniz) ve varsayılan olarak tüm verilerinizi saklarsınız. Ancak kısa vadeli ön plan süreçleri çalıştırıyorsanız, bu konteyner dosya sistemleri gerçekten birikebilir. Bunun yerine Docker'ın kapsayıcıyı otomatik olarak temizlemesini ve kapsayıcıdan çıktığında dosya sistemini kaldırmasını istiyorsanız, --rmbayrağı ekleyebilirsiniz.

Kısacası, ana bilgisayarı durdurulmuş ve kullanılmamış kaplardan temiz tutmak yararlıdır.


1

--rmVeritabanı yedekleme veya dosya kopyalama gibi bazı eylemleri gerçekleştirmek için çalışan kapsayıcılara bağlanırken kullanıyorum . İşte bir örnek:

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

Yukarıdakiler, "app_postgres_1" adlı çalışan bir kapsayıcıya bağlanacak ve bir yedek oluşturacaktır. Yedekleme komutu tamamlandığında, kapsayıcı tamamen silinir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.