रनिंग और स्टार्टिंग के बीच डॉकटर कंटेनर में अंतर


306

एक कंटेनर शुरू करने के लिए मैं करता हूं:

docker run a8asd8f9asdf0

यदि यह मामला है, क्या करता है:

docker start

करना?

मैनुअल में यह कहता है

एक या एक से अधिक बंद कंटेनर शुरू करें


101
run = create + start
Fumisky Wells

4
काश, ओपी ने 'निष्पादित' को भी शामिल किया होता
मोनिका हेडडेक

सहायक हो सकता है: chat.stackoverflow.com/transcript/76919
शुभम

@MonicaHeddneck क्या डॉकटर है execute?
कोरय तुगय

आप एक कंटेनर में स्टार्ट का उपयोग करते हैं , यदि आपने पहले इस कंटेनर को रोका था । आप एक छवि के लिए रन का उपयोग करते हैं , यदि आप ealier ने इस छवि का एक कंटेनर हटा दिया था । मुझे लगता है कि यह मूल उपयोग है।
कोडस्लेव

जवाबों:


349

यह एक बहुत ही महत्वपूर्ण प्रश्न है और इसका उत्तर बहुत ही सरल है, लेकिन मौलिक है:

  1. भागो: एक छवि का एक नया कंटेनर बनाएं, और कंटेनर को निष्पादित करें। आप एक ही छवि के N क्लोन बना सकते हैं। आदेश है: docker run IMAGE_ID और नहीं docker run CONTAINER_ID

यहां छवि विवरण दर्ज करें

  1. प्रारंभ: पहले बंद किए गए एक कंटेनर को लॉन्च करें। उदाहरण के लिए, यदि आपने कमांड के साथ डेटाबेस को रोक दिया था, तो आप कमांड के docker stop CONTAINER_IDसाथ उसी कंटेनर को पुनः लोड कर सकते हैं docker start CONTAINER_ID, और डेटा और सेटिंग्स समान होंगे।

यहां छवि विवरण दर्ज करें


1
क्या डेटा को जारी रखने के लिए रोके गए कंटेनर के लिए एक वॉल्यूम बनाने की आवश्यकता है?
लोगन फिलिप्स

कंटेनर के डिफॉल्ट यूनियन फाइल सिस्टम लेयर पर लिखी गई फाइलों और वॉल्यूम के लिए लिखी गई फाइलों के बीच @LoganPhillips जीवनचक्र अंतर है: कंटेनर को हटाते समय कंटेनर का यूनियन फाइल सिस्टम लेयर डेटा हमेशा खो जाता है docker rm container_id। दूसरी ओर, वॉल्यूम डेटा कंटेनर के निष्कासन से बचता है जब तक कि -vविकल्प लाइन पर स्पष्ट रूप से आपूर्ति नहीं की जाती है। होस्ट सिस्टम पर वॉल्यूम लोकेशन का सीधे निरीक्षण किया जा सकता है। इस लेख को देखें
स्टीफन

प्रक्रिया के बारे & में, runकमांड लाइन के अंत में आवश्यकता है ? मुझे इसकी आवश्यकता एक काउंटिनस (24 घंटे) सेवा के रूप में है
पीटर क्रॉउस

तो फिर "डॉकटर क्रिएट" का उद्देश्य क्या है? कैसे / कब इसका उपयोग किया जाएगा?
जोसेफ गगनोन

100
  • runएक छवि चलाता है
  • startएक कंटेनर शुरू होता है ।

docker runदस्तावेज़ उल्लेख करता है:

docker runआदेश पहले बनाता निर्दिष्ट छवि पर राईट योग्य कंटेनर परत, और फिर शुरू होता है निर्दिष्ट आदेश का उपयोग यह।

यही कारण है कि डोकर, है रन एपीआई के बराबर है /containers/createतो /containers/(id)/start

आप एक मौजूदा कंटेनर नहीं चलाते हैं, आप इसे निष्पादित करते हैं (docker 1.3 के बाद से)
आप एक बाहर किए गए कंटेनर को पुनरारंभ कर सकते हैं ।


आप जोड़ने के लिए की जरूरत नहीं है @Tarik -iलिए docker runएक इंटरैक्टिव प्रक्रिया के लिए? मेरा मतलब है, डॉकटर को कंटेनर चलाने के लिए एक छवि की आवश्यकता होती है।
VonC

10
अधिक विस्तृत प्रतिक्रिया लिखने के लिए किसी के लिए एक कमरा प्रतीत होता है। उत्तर बहुत व्याख्यात्मक नहीं दिखता है।
१.११ बजे qartal

4
मेरे लिए अगला सवाल क्या-अंतर-बीच एक कंटेनर और एक-छवि थी stackoverflow.com/questions/21498832/...
एलेक्स Punnen

18

एक उदाहरण के साथ स्पष्टीकरण:

विचार करें कि आपके कंप्यूटर में एक गेम (आईएसओ) छवि है।

जब आप run (अपनी छवि को वर्चुअल ड्राइव के रूप में माउंट करते हैं), वर्चुअल ड्राइव में सभी गेम सामग्री के साथ एक वर्चुअल ड्राइव बनाई जाती है और गेम इंस्टॉलेशन फ़ाइल स्वचालित रूप से लॉन्च हो जाती है। [अपनी डॉकटर छवि चलाना - एक कंटेनर बनाना और फिर उसे शुरू करना।]

लेकिन जब आप stop (डॉकटर के समान) इसे रोकते हैं, तो वर्चुअल ड्राइव अभी भी मौजूद है लेकिन सभी प्रक्रियाओं को रोकती है। [जब तक कंटेनर मौजूद नहीं है, तब तक इसे हटाया नहीं जाता]

और जब आप करते हैं start (docker start के समान), वर्चुअल ड्राइव से गेम फाइल्स इसके निष्पादन को शुरू करती हैं। [मौजूदा कंटेनर शुरू करना]

इस उदाहरण में - खेल की छवि आपकी डॉकटर छवि है और वर्चुअल ड्राइव आपका कंटेनर है।


8

daniele3004 का जवाब पहले से ही बहुत अच्छा है।

बस एक त्वरित और गंदी मेरे जैसे लोग हैं, जो ऊपर मिक्स के लिए सूत्र runऔर startसमय-समय पर:

docker run [...]= docker pull [...]+docker start [...]


2
यह बिल्कुल सच नहीं है। आधिकारिक दस्तावेज़ के अनुसार, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(स्रोत: docs.docker.com/engine/reference/commandline/run )
sshh

2

runकमांड छवि से एक कंटेनर बनाता है और फिर इस कंटेनर पर रूट प्रक्रिया शुरू करता है। साथ यह चल रहा है run --rmझंडा आप बेकार मृत कंटेनर बाद में दूर करने की मुसीबत बचत होगी और आप के अस्तित्व की अनदेखी करने की अनुमति होगी docker startऔर docker removeकुल मिलाकर।

यहां छवि विवरण दर्ज करें

run कमांड कुछ अलग काम करता है:

docker run --name dname image_name bash -c "whoami"
  1. छवि से एक कंटेनर बनाता है। इस बिंदु पर कंटेनर में एक आईडी होगा, एक नाम हो सकता है यदि एक दिया जाता है, तो इसमें दिखाई देगाdocker ps
  2. कंटेनर की जड़ प्रक्रिया को शुरू / निष्पादित करता है। इसके बाद के संस्करण में कोड निष्पादित करेगा bash -c "whoami"। अगर एक चलता हैdocker run --name dname image_name कंटेनर चलाने के आदेश के बिना कोई तुरंत रोका हुआ राज्य चला जाएगा।
  3. एक बार रूट प्रक्रिया समाप्त हो जाने के बाद, कंटेनर को रोक दिया जाता है। इस बिंदु पर, यह बहुत बेकार है। कोई भी कुछ भी निष्पादित नहीं कर सकता है या कंटेनर को फिर से जीवित कर सकता है। मूल रूप से रोके हुए राज्य से 2 तरीके हैं: कंटेनर को हटा दें या कुछ और चलाने के लिए रोके गए कंटेनर में से एक चौकी (यानी एक छवि) बनाएं। एक docker removeही नाम के तहत कंटेनर को लॉन्च करने से पहले चलाना होगा ।

एक बार कंटेनर को स्वचालित रूप से रोकने के बाद उसे कैसे हटाया जाए? कमांड मेंएक--rmध्वजजोड़ेंrun:

docker run --rm --name dname image_name bash -c "whoami"

एक कंटेनर में कई कमांड कैसे निष्पादित करें? उस मूल प्रक्रिया को मरने से रोक कर। यह--detachedध्वज केसाथ शुरू में कुछ बेकार कमांड चलाकरऔर फिर वास्तविक कमांड चलाने के लिए "निष्पादित" का उपयोग करके किया जा सकता है:

docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"

docker stopफिर हमें आवश्यकता क्यों है ? इस सुस्त कंटेनर को रोकने के लिए जिसे हमने पिछले स्निपेट में अंतहीन कमांड के साथ लॉन्च किया थाtail -f /dev/null

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