डॉकर-हब का उपयोग किए बिना मेरी डॉकर-छवि कैसे साझा करें?


257

मुझे आश्चर्य हो रहा है कि डोकर की छवियां मेरे स्थानीय होस्ट मशीन में वास्तव में कहां संग्रहीत हैं। क्या मैं अपनी डॉक-छवि को साझा कर सकता हूं Docker-Hubया बिना Dockerfile'वास्तविक' डॉकर-छवि का उपयोग किए बिना ? और वास्तव में क्या हो रहा है जब मैं अपने डॉक-इमेज को डोकर-हब में 'पुश' करता हूं?


2
भविष्य के संदर्भ के लिए:
डॉकिंग

जवाबों:


243

डॉकर छवियों को फाइलसिस्टम परतों के रूप में संग्रहीत किया जाता है। Dockerfile में प्रत्येक कमांड एक परत बनाता है। आप docker commitकुछ परिवर्तन ( docker runसंभवतः के माध्यम से ) करने के बाद कमांड लाइन से उपयोग करके भी परतें बना सकते हैं ।

इन परतों को डिफ़ॉल्ट रूप से संग्रहीत किया जाता है /var/lib/docker। यद्यपि आप (सैद्धांतिक रूप से) चेरी को वहां से फाइलें ले सकते हैं और इसे एक अलग डॉक सर्वर में स्थापित कर सकते हैं, संभवतः डॉकर द्वारा उपयोग किए गए आंतरिक प्रतिनिधित्व के साथ खेलना एक बुरा विचार है।

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

डॉकटर रजिस्ट्री रजिस्ट्री को धकेलने के बिना छवि साझा करने के विकल्पों के लिए, आपके सबसे अच्छे विकल्प हैं:

  • docker saveएक छवि या docker exportएक कंटेनर। यह मानक आउटपुट के लिए एक टार फ़ाइल का उत्पादन करेगा, इसलिए आप कुछ ऐसा करना पसंद करेंगे docker save 'dockerizeit/agent' > dk.agent.latest.tar। तब आप उपयोग कर सकते हैं docker loadया docker importएक अलग होस्ट में।

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

  • Quay.io की तरह एक और रजिस्ट्री का उपयोग करें (मैंने व्यक्तिगत रूप से इसकी कोशिश नहीं की है), हालांकि डॉकटर हब के साथ आपकी जो भी चिंताएं हैं वे शायद यहां भी लागू होंगी।


6
भविष्य के संदर्भ के लिए, docker रजिस्ट्री छवि का लिंक पुराना है। अब आपको डॉकर रजिस्ट्री 2.0 और
जीथब

1
मुझे यकीन नहीं है कि यह स्पष्ट है कि रजिस्ट्री 2.0 मूल एक के लिए उपयोग प्रतिस्थापन के लिए तैयार है। यह खोज के रूप में कुछ बुनियादी कार्यशीलता को याद करने लगता है stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers

1
के बारे में प्रश्न docker save: जब मैं एक ऐसी छवि को धक्का देता हूं जो किसी अन्य छवि से निकलती है (मान लें python:2.7) तो रजिस्ट्री में, मूल छवि को एक से अधिक बार अपलोड करने की आवश्यकता नहीं है, जब तक कि यह बदल न जाए। क्या मैं एक समान फ़ाइल आकार अनुकूलन प्राप्त करने के लिए आंशिक छवियां सहेज सकता हूं? मैं इन हुप्स के माध्यम से कूद रहा हूं क्योंकि मैं कई छवियों के साथ एक शौकीन हूं और मैं एक निजी रजिस्ट्री के लिए भुगतान नहीं करना चाहता।
पीटीयर

4
क्या आप सिर्फ एक git रेपो से एक dockerfile, और docker buildहोस्ट पर src फाइलें नहीं खींच सकते ?
jshxe

1
मेरे निर्माण का @Jishxe हिस्सा है npm install... मैं अपने मेजबान पर निर्माण नहीं कर सकता क्योंकि इसमें बहुत कम मेमोरी है और यह कदम हमेशा विफल रहता है (देखें: github.com/npm/npm/issues/5021 )
सॉफ्ट बुलेट

46

इस ब्लॉग के आधार पर , कोई एक डॉक रजिस्ट्री के बिना एक डॉक छवि को साझा कर सकता है:

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

एक बार यह कमांड पूरा हो जाने के बाद, कोई चित्र को सर्वर पर कॉपी कर सकता है और निम्नानुसार आयात कर सकता है:

docker load --input latestversion-1.0.0.tar

18

एक दूरस्थ सर्वर के लिए एक docker छवि भेजने 3 सरल चरणों में किया जा सकता है:

  1. स्थानीय रूप से, डॉकटर छवि को एक .tar के रूप में सहेजें :
docker save -o <path for created tar file> <image name>
  1. स्थानीय रूप से, रिमोट से .tar को स्थानांतरित करने के लिए scp का उपयोग करें

  2. दूरस्थ सर्वर पर, डॉकटर में छवि लोड करें:

docker load -i <path to docker image tar file>

8

यदि आप खुद डॉकर हब का उपयोग नहीं करना चाहते हैं, तो आप आर्टिफैक्ट्री के तहत अपने खुद के डॉकर रिपॉजिटरी को एफफ्रॉग द्वारा होस्ट कर सकते हैं:

https://www.jfrog.com/confluence/display/RTF/Docker+Repositories

जो तब आपके स्वयं के सर्वर पर चलेगा।

अन्य होस्टिंग आपूर्तिकर्ता उपलब्ध हैं, जैसे CoreOS:

http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/

जो quay.io खरीदा है

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