“Docker build --pull” का उद्देश्य क्या है?


17

जब आप सामान्य रूप से डॉकटर छवि का निर्माण करते हैं docker build .

लेकिन मैंने पाया है कि आप निर्दिष्ट कर सकते हैं --pull, इसलिए पूरी कमांड दिखेगीdocker build --pull .

मैं के उद्देश्य के बारे में निश्चित नहीं हूं --pull। डॉकर्स के आधिकारिक दस्तावेज कहते हैं, "हमेशा छवि का एक नया संस्करण खींचने का प्रयास करें", और मुझे यकीन नहीं है कि इस संदर्भ में इसका क्या मतलब है।

आप docker buildएक नई छवि बनाने के लिए उपयोग करते हैं , और अंततः इसे कंटेनर रजिस्ट्री में कहीं प्रकाशित करते हैं। आप कुछ ऐसा क्यों खींचना चाहेंगे जो अभी तक मौजूद नहीं है?

मैं "सरल" के रूप में कुछ की उम्मीद करता हूं क्योंकि यह वेब पर आसानी से पाया जा सकता है, लेकिन किसी को भी इस तरह का प्रश्न नहीं लगता है। Google पर एकमात्र वास्तविक हिट डॉकर्स आधिकारिक डॉक्स को संदर्भित करता है, जिसे मैं (जैसा कि ऊपर कहा गया है) समझ में नहीं आता है।

आपकी सहायताके लिए धन्यवाद!

जवाबों:


17

यह किसी भी आधार छवि (एस) के नवीनतम संस्करण को फिर से उपयोग करने के बजाय खींचेगा जो आपने पहले से ही स्थानीय रूप से टैग किया है

उदाहरण के लिए, किसी मूविंग टैग (जैसे ubuntu:bionic) के आधार पर एक चित्र लें । अपस्ट्रीम में समय-समय पर बदलाव होते रहते हैं और इस पर पुनर्विचार होता है, लेकिन आपके पास स्थानीय रूप से एक महीने पुरानी छवि हो सकती है। docker खुशी से पुराने आधार के विरुद्ध निर्माण करेगा। --pullएक साइड इफेक्ट के रूप में खींचेगा ताकि आप नवीनतम आधार छवि के खिलाफ निर्माण कर सकें

यह ~ आम तौर पर जितनी जल्दी हो सके अपस्ट्रीम सुरक्षा सुधार प्राप्त करने के लिए इसका उपयोग करने के लिए एक सर्वोत्तम अभ्यास है (बासी, संभावित कमजोर छवियों का उपयोग करने के बजाय)। हालाँकि आपको बदलावों को तोड़ना होगा (और यदि आप अपरिवर्तनीय टैग का उपयोग करते हैं तो इससे कोई फर्क नहीं पड़ता)


यह ubuntu:bionicछवि के साथ एक बहुत अच्छी व्याख्या है , क्योंकि यह (स्पष्ट रूप से) एक संस्करण संलग्न नहीं है, लेकिन जब भी वे एक नई छवि प्रकाशित करते हैं, तब भी अलग होगा। सब समझ में आता है। धन्यवाद!
जिम आहो

1
यदि आधार-चित्र ubuntu:0.1.0उदाहरण के लिए होगा , और उन्होंने एक नई छवि प्रकाशित की, लेकिन उसी संस्करण के साथ ubuntu:0.1.0- इसका मतलब यह है docker build --pullकि पूरी नई छवि को फिर से डाउनलोड किया जाएगा? (जो कि ज्यादातर लोग मुझे पसंद करते हैं, वह होगा)
जिम अहो

मैं उम्मीद कर रहा हूँ कि कोई व्यक्ति @JimAho से आखिरी प्रश्न स्पष्ट करेगा क्योंकि यही मैं बेहतर तरीके से समझना चाहता हूँ। यदि छवि को केवल धक्का दिया गया था, और कुछ और नहीं बदला गया, तो क्या यह मामला है कि इसे फिर से बनाया नहीं गया है?
learning2learn

2
@ Learning2learn इसका जवाब है हां, एक डॉक इमेज का टैग सिर्फ एक स्ट्रिंग है इसलिए "0.1.0" उत्तर "बायोनिक" में उदाहरण से अलग नहीं है
एंथोनी सॉटिले

@AnthonySottile धन्यवाद। बहुत ज्यादा।
learning2learn

1

सरल उत्तर। docker buildएक स्थानीय dockerfile से बनाने के लिए उपयोग किया जाता है। docker pullडॉकटर हब से खींचने के लिए उपयोग किया जाता है। यदि आप एक docker फ़ाइल के बिना docker बिल्ड का उपयोग करते हैं तो यह एक त्रुटि फेंकता है।

जब आप निर्दिष्ट --pullया :latestdocker नवीनतम संस्करण को डाउनलोड करने का प्रयास करेंगे (यदि कोई हो)

मूल रूप से, यदि आप जोड़ते हैं, तो यह हर बार चलने वाले नवीनतम संस्करण को खींचने की कोशिश करेगा।


यदि आपके पास स्तरित चित्र हैं - तो क्या यह उन सभी को हमेशा खींचेगा ?
जिम अहो

यदि आपके पास स्तरित छवियां हैं, तो कुछ को मशीन (पुरानी परतों) पर कैश किया जाएगा और जो भी नई परतें खींची जाएंगी।
ड्यूडॉफ

0

डॉकर --pull ध्वज को पारित करने की अनुमति देता  है  docker build, जैसे  docker build . --pull -t myimage। यह सुनिश्चित करने के लिए अनुशंसित तरीका है कि बिल्ड हमेशा स्थानीय रूप से उपलब्ध संस्करण के बावजूद नवीनतम कंटेनर छवि का उपयोग करता है। हालांकि उल्लेख के लायक एक अतिरिक्त बिंदु:

यह सुनिश्चित करने के लिए कि आपका निर्माण पूरी तरह से पुनर्निर्मित है, जिसमें अद्यतनों के लिए आधार छवि की जाँच करना शामिल है, निर्माण के समय निम्नलिखित विकल्पों का उपयोग करें:

--no-cache - यह पहले से उपलब्ध परतों के पुनर्निर्माण को मजबूर करेगा।

इसलिए पूरी कमांड इस तरह दिखाई देगी:

docker build . --pull --no-cache --tag myimage:version

इसके लिए समान विकल्प उपलब्ध हैं docker-compose:

docker-compose build --no-cache --pull


सामान्य उपयोग में आपको आवश्यकता नहीं होनी चाहिए --no-cache। यदि आधार छवि अपडेट की जाती है (और --pullएक नया संस्करण प्राप्त होता है) जो स्वचालित रूप से कैश को अमान्य करता है; इसी तरह अगर आप COPYअलग कोड है कि कैश अमान्य होगा। केवल एक चीज जो आमतौर पर प्रभावित करेगी, यदि आप apt-get installनेटवर्क-होस्टेड पैकेज की तरह कुछ कर रहे हैं, तो ऐसी स्थिति में --no-cacheयह एक नए संस्करण की जांच करने का कारण बनेगा, भले ही आधार छवि अपडेट न हुई हो।
डेविड भूलभुलैया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.