डॉकर रन बनाम क्रिएट


93

बीच क्या अंतर है docker runऔर docker createआदेशों?

मैं आमतौर पर उपयोग करता हूं runलेकिन कभी-कभी दस्तावेज में मैं देखता हूं create

डॉकटर --helpबताता है

create    Create a new container
run       Run a command in a new container

क्या इसका मतलब यह है कि runजब हम एक नए कंटेनर को एक कमांड पास करने की आवश्यकता होती है, तो इसका उपयोग किया जाता है? createतब का उद्देश्य क्या है ?

जवाबों:


105

डॉकटर प्रलेखन से

Docker create कमांड निर्दिष्ट छवि के ऊपर एक लेखन योग्य कंटेनर लेयर बनाता है और इसे निर्दिष्ट कमांड चलाने के लिए तैयार करता है। कंटेनर ID को तब STDOUT में मुद्रित किया जाता है। यह वह जगह है डोकर रन के लिए इसी तरह डी कंटेनर सिवाय शुरू कर दिया कभी नहीं है । फिर आप किसी भी बिंदु पर कंटेनर शुरू करने के लिए docker start कमांड का उपयोग कर सकते हैं।

यह तब उपयोगी होता है जब आप समय से पहले एक कंटेनर कॉन्फ़िगरेशन सेट करना चाहते हैं ताकि यह तब शुरू हो जब आप इसकी आवश्यकता हो। नए कंटेनर की प्रारंभिक स्थिति बनाई गई है।


2
समानता पर जोर देते हुए, --run सभी तर्क को स्वीकार करता है जैसे कि --create (सिर्फ --detach, --detach- कीज़ और --sig-प्रॉक्सी के अलावा), docs.docker.com/vit.09
मार्विन

117

तकनीकी रूप से, docker run= docker create+ docker start


42
वास्तव में, और मैंने इसे सीखने में कुछ घंटे बिताए, docker run= docker create+ docker start+ docker attach। इसके बिना attach, शुरू हुआ कंटेनर पृष्ठभूमि में चलता है
वेबबॉवर

19

1
U ने लिखा "docker run कंटेनर बनाता है (docker create के रूप में) और इसे चलाता है।" <--- परिपत्र परिभाषा, और आपने निष्पादन और प्रारंभ के बीच अंतर स्थापित नहीं किया है, और आप इसे "रन" के रूप में संदर्भित करते हैं। (और जब यू कहते हैं कि "इसे चलाता है" यदि हम docker run में रन की आपकी परिभाषा को देखते हैं, तो इसका मतलब है कि बनाएं और रन करें, इसलिए आप एक अनंत संख्या के साथ समाप्त हो जाएंगे .. इसलिए संभवतः जब आप कहते हैं कि इससे कुछ कम होता है "इसे चलाता है" .. लेकिन फिर आपको निष्पादन और प्रारंभ से "इसे चलाता है" भेद करना चाहिए, क्या आपका मतलब है कि प्रारंभ करें और निष्पादित करें या बस प्रारंभ करें)। शायद -d का मतलब है कोई अमल शुरू करना। और बिना -d प्रारंभ और
निष्पादित होता है

8

अन्य उत्तरों में यह शामिल है, लेकिन मुझे लगा कि मैं समान शेल कमांड-लाइन दिखाऊंगा क्योंकि यह वास्तव में स्पष्ट करता है:

$ docker run myimage

के समान है

$ docker start -a $(docker create myimage)

यहां, docker createनामित छवि से एक कंटेनर बनाने के लिए उपयोग किया जाता है और बनाई गई कंटेनर आईडी को आउटपुट करता है और docker startउस आईडी के साथ कंटेनर को शुरू करने के लिए उपयोग किया जाता है। -aविकल्प टर्मिनल तो संलग्न करने के लिए है कि कंटेनर अग्रभूमि जो के डिफ़ॉल्ट व्यवहार है में चलाता है का कारण बनता है docker run

एक कंटेनर जो बनाया गया है लेकिन कभी भी शुरू नहीं हुआ है Created; इसके साथ देखा जा सकता है docker container ls -a


6

मैं डॉकटर के लिए नया हूं और बस इसके साथ खेलने के लिए आसपास हूं;

मेरा लेना यह है कि डॉक चलाने वाले अनिवार्य रूप से निम्न कार्य करते हैं: (.. के क्रम में) docker बनाते हैं , docker start करते हैं , docker देते हैं , क्योंकि यह 'रन' कमांड करने के बाद तुरंत सक्रिय शेल से जुड़ जाता है ।


1
इससे पहले कि मैंने आपके उत्तर पर गौर किया, बस इसके बारे में ऊपर एक टिप्पणी पोस्ट की। काश मैंने इसे एक या दो घंटे पहले देखा होता।
वेबबॉवर

-3

डॉकर रन मूल रूप से कंटेनर में रनिंग कमांड के लिए होता है।

docker run -it <Container Name> /bin/bash

ऊपर एक बैश टर्मिनल बनाने के लिए है। और हमें कंटेनर में बैश कमांड का उपयोग करें।

डॉकर बना एक Docker Image से एक कंटेनर बनाने के है।

docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu

ऊपर "डॉक-उबंटु" नाम का एक कंटेनर बनाने के लिए है छवि "उबंटू" से


1
आप docker run -it <Container name>तब बिना कर सकते हैं / बिन / बैश कर सकते हैं । उदाहरण के लिए रूबी एक निष्पादन योग्य को irb कहा जाएगा। इसके अलावा, आप रन-डी कर सकते हैं, जो डॉकरसमेंट्स / स्टैटिक-साइट के साथ किया जाता है जो लॉग ऑन नहीं करता है। इसलिए मुझे लगता है कि यह निष्पादित नहीं करता है लेकिन यह इसे शुरू करता है।
बार्लोप

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