स्क्रैच से डॉकर इमेज बनाना

Creating Docker Image From Scratch



किसी भी अन्य कंटेनरीकरण तकनीक पर डॉकर का मुख्य लाभ यह है कि डॉकर का उद्देश्य डेवलपर्स और उनके अपस्टैक अनुप्रयोगों के लिए है। जबकि उचित कंटेनरीकरण प्रौद्योगिकियां जैसे एलएक्ससी , क्षेत्र तथा जेलों एक संचालन के नजरिए से लक्षित हैं, या, इसे सीधे शब्दों में कहें, तो ये प्लेटफॉर्म क्लाउड पर चलने वाली वर्चुअल मशीनों के लिए एक विकल्प हैं। जबकि, डॉकर पैकेज और निष्पादन योग्य बायनेरिज़ के लिए एक विकल्प है।

संक्षेप में, डॉकर एक सार्वभौमिक पैकेज प्रबंधक की तरह अधिक से अधिक होता जा रहा है जो सभी संभावित लिनक्स प्लेटफार्मों पर काम करता है। यह कंटेनर लेता है और डेवलपर्स का सामना करने वाली एक पूरी तरह से अलग समस्या को हल करने के लिए उनका उपयोग करता है। समस्या यह है कि डेवलपर्स एप्लिकेशन लिखने के लिए अपने डेस्कटॉप ऑपरेटिंग सिस्टम (जैसे विंडोज, मैकओएस या लिनक्स के साथ एक टन डेस्कटॉप से ​​संबंधित पैकेज) का उपयोग करते हैं। वे जो एप्लिकेशन लिखते हैं, वे अक्सर सर्वर पर पूरी तरह से अलग ऑपरेटिंग सिस्टम पर चलते हैं, कुछ लिनक्स वितरण के साथ डेवलपर के लैपटॉप की तुलना में पूरी तरह से अलग होता है।







डॉकर के साथ विचार यह है कि आपका आवेदन डॉकर छवि के रूप में पैक किया गया है। इस छवि को लेने और इसे आपके लिए एक कंटेनरीकृत एप्लिकेशन के रूप में चलाने के लिए डॉकर का काम है। कंटेनरीकृत होने का मतलब है कि एप्लिकेशन, और इसकी निर्भरता, एक अलग वातावरण में चलेगी जो कि डेवलपर के लैपटॉप और यहां तक ​​कि उत्पादन सर्वर से पूरी तरह से भिन्न हो सकती है। जब तक वे दोनों डॉकर का समर्थन करते हैं, वे दोनों एक ही एप्लिकेशन को ठीक उसी तरह चला सकते हैं।



एक डॉकर छवि का एनाटॉमी

जैसा कि पहले उल्लेख किया गया है, एक डॉकर ऐप एक सहमत पर्यावरण पर चलेगा। अब सवाल यह है कि हम उस माहौल का निर्माण कैसे करें? अधिकांश एप्लिकेशन छवियां डॉकर आधार छवि आयात करती हैं और उसके ऊपर अपना एप्लिकेशन बनाती हैं।



एप्लिकेशन सॉफ्टवेयर की परतों से बनाए जाते हैं। एक वर्डप्रेस कंटेनर छवि एक httpd कंटेनर छवि का उपयोग करके बनाई गई है, जो बदले में, उबंटू छवि के शीर्ष पर बनाई गई है। जिस छवि पर एक नई छवि बनाई जाती है उसे डॉकर शब्दावली में PARENT IMAGE के रूप में जाना जाता है। डॉकरफाइल में (हम थोड़ी देर बाद डॉकरीफाइल का अर्थ प्राप्त करेंगे), इस मूल छवि का उल्लेख फ़ाइल के शीर्ष पर किया गया है जैसा कि नीचे दिखाया गया है:





उबंटू से:18.04
## बाकी डॉकरफाइल

निष्पादित होने पर यह डॉकरफाइल आपके एप्लिकेशन को एक डॉकर छवि (एक प्रकार की बाइनरी) में परिवर्तित कर देता है जिसे आप फिर एक रजिस्ट्री पर धकेल सकते हैं जहां से इसे कहीं और नए कंटेनर बनाने के लिए खींचा जा सकता है। हालांकि, उन सभी के पास उबंटू: 18.04 उनकी मूल छवि के रूप में होगा, और ऐसे चलेगा जैसे कि यह एक उबंटू प्रणाली है जिसमें वे चल रहे हैं।

एक नई डॉकटर छवि खींचने की कोशिश करते समय आपने इस पर ध्यान दिया होगा।



स्क्रैच से डॉकर इमेज बनाना

यह दिखाता है कि वास्तविक अनुप्रयोग (जो आकार में केवल कुछ मेगाबाइट हो सकता है) लाने से पहले कितनी परतें खींची जाती हैं।

इस कारण से, हम वह बनाना चाहते हैं जिसे आधार छवि के रूप में जाना जाता है। जो किसी और चीज के ऊपर नहीं बना है। स्क्रैच कीवर्ड का उपयोग यह इंगित करने के लिए किया जाता है कि यह परत किसी और चीज के ऊपर नहीं बनी है। इस तरह:

शुरुवात से
## बाकी Dcokerfile

हम पहले एक साधारण हैलो-वर्ल्ड एप्लिकेशन बनाएंगे और फिर यह पता लगाएंगे कि बाकी डॉकरफाइल क्या होने वाला है। मेजबान प्रणाली उबंटू: 18.04 एलटीएस है और हम प्रयोग के लिए डॉकर संस्करण 17.12.1-सीई का उपयोग कर रहे हैं।

एक स्थिर बाइनरी बनाना

डॉकर कंटेनर बाकी ऑपरेटिंग सिस्टम से अलग चल रही प्रक्रियाओं का एक संग्रह है। केवल एक चीज जो प्रक्रिया के संपर्क में है, वह है कर्नेल। कर्नेल इन प्रक्रियाओं को CPU पर शेड्यूल करने, मेमोरी प्रबंधन करने और कुछ अन्य बुनियादी बुकिंग कार्य रखने के लिए ज़िम्मेदार है।

लेकिन अधिकांश उच्च स्तरीय अनुप्रयोग बहुत सारे सिस्टम पुस्तकालयों पर निर्भर करते हैं (जैसे ग्लिबक, मसल, क्लिबक, आदि ) और बहुत सारी रनटाइम निर्भरताएँ जैसे Python या Node.js या Java Runtime। एप्लिकेशन बाइनरी में इसके अंदर सभी पुस्तकालय उपलब्ध नहीं हैं, लेकिन जब यह निष्पादन शुरू करता है तो यह उन पुस्तकालयों को होस्ट ऑपरेटिंग सिस्टम से कॉल करता है।

क्योंकि हम शुरुआत से एक छवि बनाने की कोशिश कर रहे हैं, हमें ये बारीकियां नहीं मिलेंगी। तो हमारे आवेदन को एक स्थिर फ़ाइल या एक स्टैंडअलोन निष्पादन योग्य होना चाहिए।

आइए MyDockerImage नामक एक फ़ोल्डर बनाकर और उसके अंदर एक फ़ाइल hello.cc बनाकर शुरू करें।

$एमकेडीआईआरमायडॉकरइमेज
$सीडीमायडॉकरइमेज
$स्पर्शhello.cc

अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करके hello.cc खोलें और इसके अंदर निम्नलिखित पंक्तियाँ जोड़ें।

#शामिल
नेमस्पेस एसटीडी का उपयोग करना;
NSमुख्य(){
लागत<< 'नमस्ते! यह संदेश एक कंटेनर से आ रहा हैएन';
वापसी 0;

}

यह एक साधारण सी++ प्रोग्राम है जो हैलो! ये संदेश …

पहले चर्चा किए गए कारणों के लिए, हम इसे स्थिर ध्वज का उपयोग करके संकलित करेंगे। उपयोग किया जा रहा संकलक है g++ (उबंटू 7.3.0-16ubuntu3) 7.3.0।

प्रोग्राम को संकलित करने के लिए, उसी निर्देशिका में निम्न आदेश चलाएँ:

$ जी++ -हे नमस्ते-स्थिरनमस्ते।डीसी

यह उसी निर्देशिका में एक बाइनरी निष्पादन योग्य फ़ाइल हैलो बनाता है। वह हमारी स्थिर फ़ाइल है। परीक्षण करें कि क्या यह टर्मिनल में फ़ाइल नाम का उल्लेख करके इरादा के अनुसार चल रहा है।

$./नमस्ते

अब हम इस सरल कार्यक्रम को कंटेनरीकृत करने के लिए तैयार हैं।

डॉकरफाइल

Dockerfile में नियमों का एक सेट होता है जो आपकी एप्लिकेशन फ़ाइलों (जैसे बायनेरिज़, स्रोत फ़ाइलें, आदि) को फ़ाइल सिस्टम लेआउट, एक्सपोज़्ड पोर्ट आदि जैसे विभिन्न कॉन्फ़िगरेशन मापदंडों के साथ लेता है और उन्हें Docker छवि फ़ाइल में बदल देता है। फिर आप छवि फ़ाइल को किसी ऐसे व्यक्ति के साथ साझा कर सकते हैं जो उस एप्लिकेशन को चलाना चाहता है।

हम Dockerfile के लिए उपलब्ध हर विकल्प में खुदाई नहीं करेंगे, इसके बजाय हम एक बहुत ही न्यूनतर Dockerfile लिखेंगे। उसी निर्देशिका में, जहां आपका हैलो निष्पादन योग्य रहता है, नाम की एक खाली फ़ाइल बनाएं डॉकरफाइल।

$स्पर्शडॉकरफाइल

इसे अपने पसंदीदा टेक्स्ट एडिटर से खोलें, और इसमें निम्नलिखित पंक्तियाँ लिखें:

शुरुवात से
नमस्ते जोड़ें/
अध्यक्ष एवं प्रबंध निदेशक['/नमस्ते']

खरोंच मूल छवि नहीं है। बल्कि यह डॉकर को इंगित करता है कि छवि किसी अन्य छवि के ऊपर नहीं बनी है। यह खरोंच से बनाया गया है। ADD कमांड वर्तमान निर्देशिका से |_+_|नाम की स्थिर बाइनरी लेगा और इसे छवि फ़ाइल की मूल निर्देशिका में जोड़ देगा। जब हम अंत में इस छवि के आधार पर एक कंटेनर चलाएंगे, तो हैलो निष्पादन योग्य रूट निर्देशिका के अंदर ही देखा जाएगा |_+_|

अंत में, सीएमडी लाइन में एक स्ट्रिंग है /नमस्ते जब भी इस छवि से एक कंटेनर बनाया जाता है, तो इस स्ट्रिंग को शेल कमांड के रूप में निष्पादित किया जाएगा, इस प्रकार बाइनरी फ़ाइल जिसे हमने अपने कंटेनर में जोड़ा और उस संदेश को प्रिंट किया जो हमने अपने ऐप में लिखा था।

आइए का आह्वान करके छवि का निर्माण करें डोकर बिल्ड कमांड जो डॉकरफाइल की सामग्री के माध्यम से जाएगी और छवि उत्पन्न करेगी। Dockerfile और निष्पादन योग्य बाइनरी के समान निर्देशिका में निम्न कमांड चलाएँ।

$डोकर बिल्ड--उपनामनमस्ते ।

NS -टैग हैलो ध्वज छवि का नाम सेट करता है नमस्ते और बिंदु ( . ) अंत में बताता है डोकर बिल्ड Dockerfile और संबंधित सामग्री के लिए वर्तमान निर्देशिका को देखने के लिए।

डॉकर कंटेनर चलाना

यह जाँचने के लिए कि क्या हमारे द्वारा अभी बनाई गई छवि छवियों की सूची में दिखाई देती है, चलाएँ:

$डोकर चित्र

ध्यान दें कि अन्य छवियों की तुलना में हैलो छवि कितनी छोटी है। किसी भी स्थिति में, यह एक कंटेनर के रूप में चलाने के लिए तैयार है,

$डॉकर रन हेलो

इतना ही! आपने खरोंच से अपना पहला न्यूनतर कंटेनर बनाया है।

अन्य विकल्प

जबकि स्क्रैच से चित्र बनाना हमेशा एक विकल्प होता है, लोग अक्सर अन्य हल्के लिनक्स डिस्ट्रो से चित्र बनाते हैं। उदाहरण के लिए अल्पाइन और बिजीबॉक्स जैसी छवियां वास्तव में हल्के वातावरण हैं जिनमें ग्लिब के बजाय मसल जैसे छोटे पुस्तकालय हैं।

उनका उपयोग करके अपनी मूल छवि के रूप में उपयोग करना अल्पाइन से: नवीनतम परिणामस्वरूप छोटी छवियां भी होंगी। चूंकि आधार छवियों का आकार केवल 2-5 एमबी है। हमें बताएं कि क्या कोई डॉकर से संबंधित विषय है जिसे आप चाहते हैं कि हम आगे कवर करें। आप हम तक पहुंच सकते हैं ट्विटर , फेसबुक या ईमेल द्वारा हमें सब्सक्राइब करें।