स्वचालित डॉकटर नियोजन पर मेरे लेख से :
डॉकटर छवियां बनाम कंटेनर
डॉकरलैंड में, चित्र हैं और कंटेनर हैं । दोनों बारीकी से संबंधित हैं, लेकिन अलग हैं। मेरे लिए, इस द्वंद्ववाद को लोभी ने डॉकटर को बेहद स्पष्ट किया है।
एक छवि क्या है?
एक छवि एक निष्क्रिय, अपरिवर्तनीय, फ़ाइल है जो अनिवार्य रूप से एक कंटेनर का स्नैपशॉट है। छवियां बिल्ड कमांड के साथ बनाई गई हैं , और वे रन के साथ शुरू होने पर एक कंटेनर का उत्पादन करेंगे । छवियाँ जैसे एक डोकर रजिस्ट्री में जमा हो जाती है registry.hub.docker.com । क्योंकि वे काफी बड़े हो सकते हैं, छवियों को अन्य छवियों की परतों से बना होता है, जिससे नेटवर्क पर छवियों को स्थानांतरित करते समय कम से कम डेटा भेजा जा सकता है।
स्थानीय चित्रों को चलाकर सूचीबद्ध किया जा सकता है docker images
:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 5e019ab7bf6d 2 months ago 180 MB
ubuntu 14.04 99ec81b80c55 2 months ago 266 MB
ubuntu latest 99ec81b80c55 2 months ago 266 MB
ubuntu trusty 99ec81b80c55 2 months ago 266 MB
<none> <none> 4ab0d9120985 3 months ago 486.5 MB
ध्यान देने योग्य कुछ बातें:
- इमेज के लिए IMAGE ID सही पहचानकर्ता के पहले 12 अक्षर हैं। आप किसी दिए गए चित्र के कई टैग बना सकते हैं, लेकिन उनकी आईडी सभी समान (ऊपर की तरह) होगी।
- आभासी आकार आभासी है क्योंकि यह सभी विशिष्ट अंतर्निहित परतों के आकार को जोड़ रहा है। इसका मतलब यह है कि उस कॉलम में सभी मानों का योग संभवतः उन सभी छवियों द्वारा उपयोग किए गए डिस्क स्थान से बहुत बड़ा है।
- REPOSITORY कॉलम में मान कमांड के
-t
ध्वज से आता है docker build
, या docker tag
किसी मौजूदा छवि से। आप एक नामकरण का उपयोग करके छवियों को टैग करने के लिए स्वतंत्र हैं जो आपको समझ में आता है, लेकिन यह जान लें कि docker टैग का उपयोग रजिस्ट्री स्थान में docker push
या के रूप में करेगा docker pull
।
- एक टैग का पूर्ण रूप है
[REGISTRYHOST/][USERNAME/]NAME[:TAG]
। के लिए ubuntu
ऊपर, REGISTRYHOST होने के लिए मान लिया जाता है registry.hub.docker.com
। इसलिए यदि आप my-application
रजिस्ट्री में अपनी छवि को स्टोर करने की योजना बनाते हैं docker.example.com
, तो आपको उस छवि को टैग करना चाहिए docker.example.com/my-application
।
- TAG कॉलम पूर्ण टैग का [[TAG] हिस्सा है । यह दुर्भाग्यपूर्ण शब्दावली है।
latest
टैग, जादुई नहीं है यह बस डिफ़ॉल्ट टैग जब आप एक टैग निर्दिष्ट नहीं करते है।
- आपके पास अपनी IMAGE ID द्वारा केवल पहचानी जा सकने वाली छवियां हो सकती हैं। इन्हें
<none>
TAG और REPOSITORY मिलेगी । उनके बारे में भूलना आसान है।
छवियों पर अधिक जानकारी डॉकर प्रलेखन और शब्दावली से उपलब्ध है ।
कंटेनर क्या है?
एक प्रोग्रामिंग रूपक का उपयोग करने के लिए, यदि कोई छवि एक वर्ग है, तो एक कंटेनर एक वर्ग का एक उदाहरण है- एक रनटाइम ऑब्जेक्ट। कंटेनर उम्मीद कर रहे हैं कि आप डॉकर का उपयोग क्यों कर रहे हैं; वे अनुप्रयोगों को चलाने के लिए एक वातावरण के हल्के और पोर्टेबल encapsulations हैं।
इसके साथ स्थानीय रनिंग कंटेनर देखें docker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ff1af05450 samalba/docker-registry:latest /bin/sh -c 'exec doc 4 months ago Up 12 weeks 0.0.0.0:5000->5000/tcp docker-registry
यहां मैं डॉकटर रजिस्ट्री का डॉक्यूमेंटेड संस्करण चला रहा हूं, ताकि मेरे पास अपनी छवियों को संग्रहीत करने के लिए एक निजी स्थान हो। फिर, कुछ बातों पर ध्यान दें:
- इमेज आईडी की तरह, कंटेनर के लिए कंटेनर आईडी सही पहचानकर्ता है। इसका एक ही रूप है, लेकिन यह एक अलग तरह की वस्तु की पहचान करता है।
docker ps
केवल कंटेनरों को चलाने वाले आउटपुट । आप सभी कंटेनरों को ( रनिंग या रोका हुआ ) देख सकते हैं docker ps -a
।
- NAMES का उपयोग
--name
ध्वज के माध्यम से प्रारंभ किए गए कंटेनर की पहचान करने के लिए किया जा सकता है ।
इमेज और कंटेनर बिल्डअप से कैसे बचें
डॉकर के साथ मेरी शुरुआती कुंठाओं में अनगढ़ इमेजेज और रुकने वाले कंटेनरों का निरंतर स्थिर निर्माण था । कुछ अवसरों पर इस बिल्डअप के कारण मेरे लैपटॉप की गति धीमी हो गई या मेरी स्वचालित बिल्ड पाइपलाइन को रोक दिया गया। "हर जगह कंटेनर" के बारे में बात करें!
हम docker rmi
हाल की dangling=true
क्वेरी के साथ संयोजन करके सभी असंबद्ध छवियों को निकाल सकते हैं :
docker images -q --filter "dangling=true" | xargs docker rmi
डॉकर उन छवियों को हटाने में सक्षम नहीं होगा जो मौजूदा कंटेनरों के पीछे हैं, इसलिए आपको docker rm
पहले बंद किए गए कंटेनरों को निकालना पड़ सकता है :
docker rm `docker ps --no-trunc -aq`
ये डॉकटर के साथ ज्ञात दर्द बिंदु हैं और भविष्य के रिलीज में संबोधित किए जा सकते हैं। हालांकि, छवियों और कंटेनरों की स्पष्ट समझ के साथ, इन स्थितियों को कुछ प्रथाओं के साथ टाला जा सकता है:
- हमेशा एक बेकार, बंद कंटेनर को हटा दें
docker rm [CONTAINER_ID]
।
- हमेशा एक बेकार, बंद कंटेनर के साथ छवि को हटा दें
docker rmi [IMAGE_ID]
।