docker run: क्यों उपयोग करें --rm (docker newbie)


110

मैं पहली बार ऐसा करने की कोशिश कर रहा हूं और अभी तक "मानसिक मॉडल" नहीं है। कुल शुरुआत।

मेरे द्वारा देखे जा रहे सभी उदाहरणों में --rmध्वज को शामिल करना शामिल है , जैसे कि

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

सवाल:

इन आदेशों में --rmध्वज क्यों शामिल है ? मुझे लगता है कि अगर मुझे इसमें अच्छे सामान के साथ कंटेनर स्थापित करने या डाउनलोड करने की परेशानी से गुजरना पड़ा, तो इसे क्यों हटाएं? मैं इसे फिर से उपयोग करने के लिए रखना चाहता हूं।

इसलिए, मुझे पता है कि मेरे पास गलत विचार है।


6
--rmबंद किए गए कंटेनर (एक docker runबनाता है) को निकालता है , न कि यह उस छवि पर आधारित है (जिसे आपने डाउनलोड किया था)।
Ry-

docker run --helpउपयोगी होना चाहिए। यदि आप कंटेनर को नहीं हटाना चाहते हैं , तो आप इसे पास कर सकते हैं
इंडेपोलिस

1
यह होना चाहिए --rmऔर कंटेनर को स्वचालित रूप से साफ़ करना और कंटेनर से बाहर निकलने पर फ़ाइल सिस्टम को हटा देना और इसका मतलब कंटेनर से सामान को निकालना नहीं है।
महाट्टम

2
आप कंटेनर डाउनलोड नहीं करते हैं, आप चित्र डाउनलोड करते हैं। छवियों और कंटेनरों के बीच अंतर जानने के लिए यहां पढ़ें: docs.docker.com/engine/docker-overview/#docker-objects
axiac

जवाबों:


98

कंटेनर केवल उस छवि का एक उदाहरण है जिसे आप उन्हें चलाने के लिए उपयोग करते हैं। एक कंटेनरीकृत ऐप बनाते समय मन की स्थिति उदाहरण के लिए एक ताजा, साफ उबंटू कंटेनर लेने से नहीं होती है, और इसमें उन ऐप्स और कॉन्फ़िगरेशन को डाउनलोड करना चाहते हैं जो आपके पास हैं, और फिर इसे चलने दें।

आपको अपने एप्लिकेशन के उदाहरण के रूप में कंटेनर का इलाज करना चाहिए, लेकिन आपका एप्लिकेशन एक छवि में एम्बेडेड है। उचित उपयोग एक कस्टम छवि बना रहा होगा, जहां आप अपनी सभी फ़ाइलों, कॉन्फ़िगरेशन, पर्यावरण चर आदि को छवि में एम्बेड करते हैं। Dockerfile के बारे में और पढ़ें कि यह यहाँ कैसे किया जाता है

एक बार जब आप ऐसा कर लेते हैं, तो आपके पास एक ऐसी छवि होती है, जिसमें सब कुछ होता है, और आपके एप्लिकेशन का उपयोग करने के लिए, आप सिर्फ उचित पोर्ट सेटिंग्स या अन्य डायनामिक वैरिएबल के साथ छवि का उपयोग करते हैं, docker run <your-image>

--rmझंडे के साथ कंटेनर चलाना उन कंटेनरों के लिए अच्छा है, जिनका उपयोग आप बहुत कम समय के लिए करते हैं, जैसे कि किसी चीज़ को पूरा करने के लिए, किसी कंटेनर के अंदर अपने एप्लिकेशन को संकलित करें, या बस कुछ ऐसा परीक्षण करें जो यह काम करता है, और फिर आप जानते हैं कि यह एक अल्पकालिक कंटेनर है और आप अपने डॉकर डेमन को बताएं कि एक बार इसका काम चलने के बाद, इससे जुड़ी हर चीज को मिटा दें और डिस्क स्थान को बचाएं।


पर्यावरण चर को docker चलाने के लिए एक बेहतर विकल्प होगा। इस तरह आप अलग-अलग कॉन्फ़िगरेशन (जैसे। उत्पादन बनाम प्रीप्रोडक्शन) के साथ शुरू कर सकते हैं?
एससीओ

प्रॉडक्ट बनाम टेस्ट का माहौल एक अच्छा उदाहरण है, जहाँ आप संभवतः अलग बनाने के लिए env var का उपयोग करना चाहते हैं और अपने ऐप को एक ही इमेज से चलाने के लिए प्राप्त कर सकते हैं, लेकिन प्रत्येक env के लिए अलग-अलग सेटिंग्स के साथ
Friend123

क्या --rmउपयोगकर्ता द्वारा टर्मिनल विंडो बंद करने पर उपयोग किए जाने वाले कंटेनरों को स्वचालित रूप से हटाने का एक तरीका है । यानी जानबूझकर exitकंटेनर शेल में नहीं चलाया जाता है, लेकिन टर्मिनल GUI विंडो को बंद कर देता है। मैंने देखा है कि इस मामले में कंटेनरों को हटाया नहीं जाता है।
वेंकराव

20

ध्वज --rmका उपयोग तब किया जाता है जब आपको कार्य पूरा होने के बाद कंटेनर को हटाने की आवश्यकता होती है।

यह छोटे परीक्षण या POC उद्देश्यों के लिए उपयुक्त है और घर में रखने के लिए सिरदर्द से बचाता है।


16

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

डिफ़ॉल्ट रूप से कंटेनर की फ़ाइल प्रणाली कंटेनर के बाहर निकलने के बाद भी बनी रहती है। यह डिबगिंग को बहुत आसान बनाता है (चूंकि आप अंतिम स्थिति का निरीक्षण कर सकते हैं) और आप डिफ़ॉल्ट रूप से अपने सभी डेटा को बनाए रखते हैं। लेकिन अगर आप अल्पकालिक अग्रभूमि प्रक्रियाएं चला रहे हैं, तो ये कंटेनर फाइल सिस्टम वास्तव में ढेर हो सकते हैं। यदि इसके बजाय आप डॉकटर को कंटेनर को स्वचालित रूप से साफ़ करना चाहते हैं और जब कंटेनर बाहर निकलता है, तो आप फ़ाइल सिस्टम को हटा सकते हैं - आप --rm फ्लैग को जोड़ सकते हैं

छोटे शब्दों में: यह मेजबान को बंद और बिना उपयोग किए गए कंटेनरों से साफ रखने के लिए उपयोगी है।


1

--rmडेटाबेस बैकअप या फ़ाइल कॉपी जैसे कुछ कार्यों को करने के लिए रनिंग कंटेनर से कनेक्ट करते समय मैं उपयोग करता हूं । यहाँ एक उदाहरण है:

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

ऊपर 'app_postgres_1' नामक एक रनिंग कंटेनर कनेक्ट करेगा और एक बैकअप बनाएगा। एक बार बैकअप कमांड पूरी हो जाने के बाद, कंटेनर पूरी तरह से हटा दिया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.