Debian पर Docker इंस्टॉल करें: एक संपूर्ण इंस्टॉलेशन गाइड
यह गाइड चार इंस्टॉलेशन तरीकों को कवर करता है—आधिकारिक Docker रिपोजिटरी से लेकर मैन्युअल पैकेज इंस्टॉलेशन तक—साथ ही एंटरप्राइज़ डिप्लॉयमेंट के लिए आवश्यक पोस्ट-इंस्टॉलेशन कॉन्फ़िगरेशन। आप सीखेंगे कि अपने Docker वातावरण को कैसे सुरक्षित करें, सामान्य समस्याओं का निवारण करें, और प्रोडक्शन-रेडी सेटअप बनाए रखें।
Debian पर Docker इंस्टॉल करना ऐसा काम नहीं होना चाहिए जहाँ आपको अंदाज़ा लगाना पड़े कि कौन-सा तरीका आपके सिस्टम को नहीं तोड़ेगा।
अधिकांश गाइड कई इंस्टॉलेशन विकल्प थमा देते हैं, बिना यह बताए कि किसे कब इस्तेमाल करें। नतीजतन आप Debian की रिपोजिटरी से आउटडेटेड पैकेज ले आते हैं, या इससे भी बुरा—ऐसी परमिशन त्रुटियाँ मिलती हैं जो आपको अपने ही कंटेनरों से बाहर कर देती हैं। परिणाम? एप्लिकेशन डिप्लॉय करने के बजाय आप घंटों ट्रबलशूटिंग में लगा देते हैं।
Debian का पूर्वानुमेय रिलीज़ साइकिल और चट्टान-सी स्थिरता इसे प्रोडक्शन Docker डिप्लॉयमेंट के लिए बेहतरीन बनाती है। आपको लगातार कंटेनर परफ़ॉर्मेंस मिलता है, बिना किसी अचानक सिस्टम अपडेट के जो आपकी सेटअप तोड़ दे। सिद्धांततः, सबसे पेचीदा भाग—इंस्टॉलेशन—के बाद आपको परेशानी नहीं आनी चाहिए।
इस ट्यूटोरियल में, मैं आपको चार इंस्टॉलेशन तरीकों, आवश्यक सुरक्षा सख्तीकरण, स्टोरेज कॉन्फ़िगरेशन, और ट्रबलशूटिंग चरणों से गुजारूँगा ताकि Debian पर Docker भरोसेमंद तरीके से चले।
Docker अधिकांश आधुनिक Debian सिस्टम पर चलता है, लेकिन शुरू करने से पहले कुछ चीज़ें जाँचनी होंगी। इस अनुभाग में, मैं आपको ठीक-ठीक सिस्टम आवश्यकताएँ दिखाऊँगा।
Debian 10 (Buster) या नया वर्तमान Docker संस्करणों के लिए आवश्यक है। Debian 9 जैसे पुराने रिलीज़ हालिया Docker Engine बिल्ड के साथ काम नहीं करेंगे। आपका कर्नेल संस्करण 3.10 या उससे अधिक होना चाहिए—पिछले कुछ वर्षों की अधिकांश Debian इंस्टॉलेशन यह आवश्यकता अपने आप पूरी करती हैं।
आपको root एक्सेस या sudo विशेषाधिकार चाहिए ताकि Docker पैकेज इंस्टॉल कर सकें और सिस्टम कॉन्फ़िगर कर सकें। Docker को ये कोर पैकेज भी चाहिए: apt-transport-https, ca-certificates, curl, और gnupg। अधिकांश Debian सिस्टम में ये इंस्टॉल होते हैं, लेकिन आप इसे आगे सत्यापित करेंगे।
हार्डवेयर आवश्यकताएँ न्यूनतम हैं:
बेसिक कंटेनर वर्कलोड के लिए 2GB RAM, जबकि डेवलपमेंट वातावरण के लिए 4GB या अधिक बेहतर रहता है
Docker इमेज और कंटेनर डेटा के लिए कम से कम 10GB खाली डिस्क स्पेस। प्रोडक्शन सेटअप को इससे कहीं अधिक की योजना बनानी चाहिए।
यदि आप GNOME डेस्कटॉप वातावरण चला रहे हैं, सुनिश्चित करें कि gnome-terminal पैकेज इंस्टॉल है। कुछ Docker प्रबंधन टूल इंटरैक्टिव कंटेनर सेशन के लिए इसकी अपेक्षा करते हैं।
शुरू करने से पहले पुराने Docker इंस्टॉलेशन हटा दें। docker, docker.io, या docker-engine जैसे लेगेसी पैकेज वर्तमान Docker Engine से टकरा सकते हैं। पुराने संस्करणों की सफाई के लिए यह कमांड चलाएँ:
sudoapt remove docker docker-engine docker.io containerd runcसंचालित द्वारा
आपकी फ़ायरवॉल और नेटवर्क सेटिंग्स कंटेनर नेटवर्किंग को प्रभावित कर सकती हैं। Docker अपने स्वयं के नेटवर्क इंटरफ़ेस और iptables नियम बनाता है। यदि आप UFW या कस्टम फ़ायरवॉल नियमों का उपयोग करते हैं, तो इंस्टॉलेशन के बाद कंटेनर ट्रैफ़िक की अनुमति देने के लिए उन्हें समायोजित करना पड़ सकता है।
इन आवश्यकताओं की अभी जाँच कर लें—यह आगे चलकर आपका ट्रबलशूटिंग समय बचाएगा।
इंस्टॉलेशन के तरीके
Debian पर Docker इंस्टॉल करने के चार तरीके हैं, और प्रत्येक के अपने समझौते हैं। मैं आपकी परिवेश और सुरक्षा आवश्यकताओं के अनुसार सही तरीका चुनने में मदद करूँगा।
यह तरीका आपको नियमित सुरक्षा अपडेट के साथ नवीनतम Docker संस्करण देता है।
Docker की आधिकारिक रिपोजिटरी में हमेशा सबसे नए स्थिर रिलीज़ होते हैं, और आपको अपने पैकेज मैनेजर के जरिए स्वत: अपडेट मिलते हैं। इस तरह आप पुराने संस्करणों में नहीं अटकते जो महत्वपूर्ण सुरक्षा पैच या नई सुविधाओं से वंचित हों।
सबसे पहले अपने सिस्टम को अपडेट करें और वे पैकेज इंस्टॉल करें जिनकी Docker को ज़रूरत है:
sudoapt update
sudoaptinstall apt-transport-https ca-certificates curl gnupg lsb-releaseसंचालित द्वारा
फिर, पैकेज की प्रामाणिकता जाँचने के लिए Docker की आधिकारिक GPG कुंजी जोड़ें:
curl-fsSL https://download.docker.com/linux/debian/gpg |sudo gpg --dearmor-o /usr/share/keyrings/docker-archive-keyring.gpgसंचालित द्वारा
रिपोजिटरी को अपने sources list में जोड़कर कॉन्फ़िगर करें:
अंत में, Docker Engine, CLI, और Compose इंस्टॉल करें:
sudoapt update
sudoaptinstall docker-ce docker-ce-cli containerd.io docker-compose-pluginसंचालित द्वारा
यह आपको प्रोडक्शन Docker डिप्लॉयमेंट के लिए आवश्यक सब कुछ दे देता है।
तरीका 2: डिफ़ॉल्ट Debian रिपोजिटरी
यह तरीका एक कमांड में Docker इंस्टॉल कर देता है, लेकिन आपको पुराना संस्करण मिलेगा।
Debian की डिफ़ॉल्ट रिपोजिटरी इंस्टॉलेशन को सरल बनाती है—बस sudo apt install docker.io चलाएँ। लेकिन एक पेंच है: अक्सर आपको Docker के ऐसे संस्करण मिलेंगे जो मौजूदा रिलीज़ से महीनों या वर्षों पुराने हैं।
यह तरीका बेसिक टेस्टिंग के लिए ठीक है या तब जब आपको अनुकूलता के लिए कोई खास पुराना संस्करण चाहिए। लेकिन आप हालिया Docker रिलीज़ के साथ आने वाले सुरक्षा अपडेट, परफ़ॉर्मेंस सुधार, और नई सुविधाओं से चूक जाएँगे।
जब आधिकारिक रिपोजिटरी विकल्प न हो, तभी इस तरीके का उपयोग करें।
तरीका 3: मैनुअल DEB पैकेज इंस्टॉलेशन
जब आप रिपोजिटरी तक पहुँच नहीं पा रहे हों, तब पैकेज सीधे डाउनलोड और इंस्टॉल करने का तरीका मैं दिखाऊँगा।
यह तरीका एयर-गैप्ड सिस्टम, सख्त इंटरनेट एक्सेस वाली कॉर्पोरेट नेटवर्क, या कई मशीनों पर एक ही Docker संस्करण बार-बार डाउनलोड किए बिना इंस्टॉल करने के लिए काम आता है।
Docker की वेबसाइट से DEB पैकेज डाउनलोड करें:
https://download.docker.com/linux/debian/dists/ पर जाएँ
अपना Debian संस्करण चुनें (bullseye, bookworm, आदि)
pool/stable/amd64/ पर जाएँ
ये पैकेज डाउनलोड करें: docker-ce_*.deb, docker-ce-cli_*.deb, और containerd.io_*.deb
यदि निर्भरताओं से जुड़ी त्रुटि मिले, तो उन्हें ठीक करने के लिए sudo apt-get install -f चलाएँ।
अपडेट के लिए इस तरीके में अधिक मैनुअल काम होता है, लेकिन इससे आप कौन-सा संस्करण इंस्टॉल हो रहा है इस पर पूरा नियंत्रण पाते हैं।
तरीका 4: सुविधा स्क्रिप्ट्स
आख़िरी तरीका टेस्ट वातावरण के लिए तेज़ इंस्टॉलेशन देता है, लेकिन पहले स्क्रिप्ट का ऑडिट कर लें।
Docker ऐसी इंस्टॉलेशन स्क्रिप्ट देता है जो आपके सिस्टम का पता लगाकर स्वत: Docker इंस्टॉल कर देता है। ये टेस्ट वातावरण जल्दी तैयार करने या कई सिस्टम पर Docker सेटअप करने के समय काम आती हैं।
curl-fsSL https://get.docker.com -o get-docker.shसंचालित द्वारा
प्रोडक्शन में सुविधा स्क्रिप्ट्स का उपयोग न करें। ये तेज़ सेटअप के लिए बनी हैं, सुरक्षित और पुनरुत्पादन योग्य डिप्लॉयमेंट के लिए नहीं। जिन सिस्टमों की परवाह है, वहाँ आधिकारिक रिपोजिटरी वाले तरीके पर टिके रहें।
मैं अनुशंसा करता हूँ कि जब तक कोई विशिष्ट बाधा न हो, आधिकारिक रिपोजिटरी वाला तरीका ही चुनें।
अपनी इंस्टॉलेशन की जाँच
इंस्टॉलेशन तो पहला कदम है—डिप्लॉय करने से पहले आपको यह पक्का करना होगा कि Docker वास्तव में काम कर रहा है। ये त्वरित परीक्षण बताएँगे कि आपका Docker सेटअप असली वर्कलोड के लिए तैयार है या नहीं।
अपना Docker संस्करण जाँचें ताकि पुष्टि हो कि इंस्टॉलेशन पूरा हुआ:
आपको Docker version xx.x.x, build x जैसा आउटपुट दिखेगा। यदि "command not found" त्रुटि मिले, तो Docker सही से इंस्टॉल नहीं हुआ या आपके PATH में नहीं है।
क्या-क्या चल रहा है यह देखने के लिए विस्तृत बिल्ड जानकारी लें:
Docker hello-world इमेज डाउनलोड करेगा और उसे चलाएगा। यदि सब ठीक रहा, तो आपको एक संदेश दिखेगा जो बताता है कि Docker कंटेनर कैसे काम करते हैं। यह परीक्षण पुष्टि करता है कि Docker इमेज खींच सकता है, कंटेनर बना सकता है, और कमांड चला सकता है।
आप जाँच सकते हैं कि Docker Compose इंस्टॉल है और काम कर रहा है:
आपको Docker Compose version vX.xx.x जैसा आउटपुट दिखना चाहिए। ध्यान दें कि नए Docker इंस्टॉलेशन docker-compose की बजाय docker compose (बीच में स्पेस) का इस्तेमाल करते हैं।
यदि ये सभी कमांड बिना त्रुटि के चलती हैं, तो आपका Docker इंस्टॉलेशन प्रोडक्शन उपयोग के लिए तैयार है।
Docker बॉक्स से बाहर काम करता है, लेकिन दैनिक उपयोग के लिए कुछ चीज़ें कॉन्फ़िगर करना चाहेंगे। इस अनुभाग में, मैं सर्विस प्रबंधन और उपयोगकर्ता अनुमतियों को कवर करूँगा जो Docker को अधिक सुविधाजनक और सुरक्षित बनाते हैं।
सर्विस मैनेजमेंट
आप इन systemd कमांड से नियंत्रित कर सकते हैं कि Docker कब चले:
आप देखेंगे कि सर्विस सक्रिय है या नहीं, कब से चल रही है, और हालिया लॉग संदेश क्या हैं। यदि Docker काम नहीं कर रहा, तो आमतौर पर यही कमांड वजह दिखा देती है।
सर्विस से जुड़ी समस्याओं को ट्रबलशूट करने के लिए लॉग देखें:
लेकिन सुरक्षा का यह समझौता याद रखें: docker समूह के यूज़र को आपके सिस्टम पर लगभग root-जैसी पहुँच मिलती है। वे होस्ट डायरेक्टरी माउंट कर सकते हैं, संवेदनशील फ़ाइलों तक पहुँच सकते हैं, और संभावित रूप से कंटेनरों से बाहर निकलकर होस्ट से समझौता कर सकते हैं।
केवल विश्वसनीय यूज़र्स को ही docker समूह में जोड़ें, और साझा सिस्टम पर जहाँ सभी यूज़र आपके नियंत्रण में नहीं हैं, ऐसा कभी न करें।
इन सेटिंग्स को एक बार कॉन्फ़िगर कर लें, Docker के साथ रोज़मर्रा का काम कहीं आसान हो जाता है।
स्टोरेज ड्राइवर कॉन्फ़िगरेशन
Docker का स्टोरेज ड्राइवर यह प्रबंधित करता है कि कंटेनर इमेज और डेटा आपके सिस्टम पर कैसे संग्रहित हों। अधिकांश यूज़र को इसे बदलने की ज़रूरत नहीं पड़ती, लेकिन अपने विकल्प समझना विशेष वर्कलोड के लिए परफ़ॉर्मेंस अनुकूल बनाने में मदद करता है।
Docker इंस्टॉलेशन के दौरान अपने आप आपके सिस्टम के लिए सर्वश्रेष्ठ स्टोरेज ड्राइवर चुनता है। Debian पर यह आम तौर पर overlay2 होता है, जो अधिकांश उपयोग मामलों के लिए उत्कृष्ट परफ़ॉर्मेंस और स्थिरता देता है।
कॉपी-ऑन-राइट ऑपरेशन तेज़ी से संभालता है जब कंटेनर फ़ाइलें संशोधित करते हैं
इमेज के बीच लेयर साझा करता है ताकि डिस्क स्पेस बचे
सभी Docker फ़ीचर सपोर्ट करता है बिना अनुकूलता समस्याओं के
भरोसेमंद तरीके से काम करता है अलग-अलग फ़ाइलसिस्टम प्रकारों पर
यदि आप विशेष वर्कलोड चला रहे हैं या आपके पास विशिष्ट फ़ाइलसिस्टम आवश्यकताएँ हैं, तो आपको अलग स्टोरेज ड्राइवर चाहिए हो सकता है।
उदाहरण के लिए, कुछ एंटरप्राइज़ स्टोरेज सिस्टम devicemapper ड्राइवर के साथ बेहतर काम करते हैं, या आपको कंटेनर फ़ाइलसिस्टम समस्याओं की डीबगिंग के लिए vfs चाहिए हो सकता है।
आप Docker के डेमन कॉन्फ़िगरेशन को संपादित करके स्टोरेज ड्राइवर बदल सकते हैं:
ध्यान रहे, स्टोरेज ड्राइवर बदलने से आपके मौजूदा कंटेनर और इमेज अप्राप्य हो जाती हैं। पहले महत्वपूर्ण डेटा का बैकअप लें, या जिन कंटेनरों को रखना है उन्हें एक्सपोर्ट करें।
अब आप नई ड्राइवर जाँचने के लिए एक इमेज पुल कर कंटेनर चला सकते हैं:
docker pull hello-world
docker run hello-worldसंचालित द्वारा
संक्षेप में, जब तक किसी खास आवश्यकता की वजह से अलग ड्राइवर न माँगा जाए, overlay2 पर ही टिके रहें।
सुरक्षा सख्तीकरण
डिफ़ॉल्ट Docker इंस्टॉलेशन डेवलपमेंट के लिए ठीक हैं, लेकिन प्रोडक्शन वातावरण में अतिरिक्त सुरक्षा परतें चाहिए होती हैं। ये कॉन्फ़िगरेशन आपके होस्ट सिस्टम को कंटेनर ब्रेकआउट और संसाधन-खपत हमलों से बचाते हैं।
SELinux/AppArmor एकीकरण
अनिवार्य एक्सेस कंट्रोल एक सुरक्षा परत जोड़ते हैं जो यह सीमित करती है कि कंटेनर क्या कर सकते हैं, भले ही वे समझौता कर लिए गए हों। इनके बिना, रूट के रूप में चल रहा कंटेनर संभावित रूप से उन होस्ट संसाधनों तक पहुँच सकता है, जहाँ उसे नहीं जाना चाहिए।
आप Docker के लिए AppArmor सक्षम कर सकते हैं, जो Debian का डिफ़ॉल्ट सुरक्षा फ़्रेमवर्क है, इन कमांड से:
AppArmor चलने के बाद, Docker की सुरक्षा प्रोफ़ाइल लोड करें:
sudo apparmor_parser -r /etc/apparmor.d/dockerसंचालित द्वारा
अब आप AppArmor सुरक्षा सक्षम करके कंटेनर चला सकते हैं:
docker run --security-opt apparmor=docker-default nginxसंचालित द्वारा
docker-default प्रोफ़ाइल कंटेनर की क्षमताओं को सीमित करती है, जैसे फ़ाइलसिस्टम माउंट करना, रॉ नेटवर्क इंटरफ़ेस की पहुँच, और कर्नेल मॉड्यूल लोड करना।
SELinux सिस्टम के लिए (यदि आप AppArmor के बजाय इसका उपयोग कर रहे हैं), पहले कंटेनर प्रबंधन सक्षम करें:
sudo setsebool -P container_manage_cgroup onसंचालित द्वारा
फिर SELinux लेबल्स के साथ कंटेनर चलाएँ:
docker run --security-opt label=type:container_t nginxसंचालित द्वारा
ये नियंत्रण कई सामान्य कंटेनर एस्केप तकनीकों को रोकते हैं और समझौता किए गए कंटेनरों से होने वाले नुकसान को सीमित करते हैं।
डेमन कॉन्फ़िगरेशन
आप Docker डेमन सेटिंग्स को अनुकूलित कर सकते हैं (और करना चाहिए) ताकि हमले की सतह घटे और सुरक्षा स्थिति बेहतर हो। /etc/docker/daemon.json फ़ाइल बनाएँ या संपादित करें:
{"live-restore":true,"userland-proxy":false,"no-new-privileges":true,"icc":false,"disable-legacy-registry":true}संचालित द्वारा
हर सेटिंग क्या करती है, यह रहा:
live-restore: true डेमन क्रैश होने पर भी कंटेनरों को चलता रखता है
userland-proxy: false बेहतर परफ़ॉर्मेंस के लिए userland प्रॉक्सी की जगह सीधे iptables का उपयोग करता है
no-new-privileges: true कंटेनरों को नए विशेषाधिकार हासिल करने से रोकता है
icc: false डिफ़ॉल्ट रूप से इंटर-कंटेनर कम्युनिकेशन को निष्क्रिय करता है disable-legacy-registry: true पुराने, असुरक्षित रजिस्ट्री प्रोटोकॉल तक पहुँच को रोकता है
इन परिवर्तनों के बाद, उन्हें लागू करने के लिए Docker रीस्टार्ट करें:
यह सीमित करता है कि समझौता किए गए कंटेनर आपके सिस्टम के साथ क्या कर सकते हैं।
कंट्रोल ग्रुप (cgroups) के साथ संसाधन सीमाएँ
बिना संसाधन सीमा वाले कंटेनर उपलब्ध CPU, मेमोरी और I/O सब कुछ खपा सकते हैं और अंततः पूरे होस्ट सिस्टम को नीचे ला सकते हैं। कंट्रोल ग्रुप (cgroups) सख्त सीमाएँ लागू कर इसे रोकते हैं।
शुरुआत मेमोरी सीमा से करें ताकि कंटेनर अत्यधिक RAM न खाएँ:
उच्च डिस्क I/O वाले सिस्टम पर, पढ़ने/लिखने की गति नियंत्रित करें:
docker run --device-read-bps /dev/sda:1mb nginxसंचालित द्वारा
पूर्ण संसाधन नियंत्रण के लिए आप एकाधिक सीमाएँ साथ में लगा सकते हैं:
docker run \--memory=1g \--cpus=2\
--pids-limit=100\
nginxसंचालित द्वारा
सभी कंटेनरों पर एकसमान सीमाएँ लागू करने के लिए, daemon.json में डिफ़ॉल्ट कॉन्फ़िगर करें:
{"default-ulimits":{"nofile":{"Hard":64000,"Name":"nofile","Soft":64000}}}संचालित द्वारा
ये सीमाएँ संसाधन-खपत हमलों को रोकती हैं और कंटेनरों के बीच निष्पक्ष संसाधन साझा सुनिश्चित करती हैं।
इन सुरक्षा उपायों को एक बार कॉन्फ़िगर कर लें, आपका Docker वातावरण समझौता करना कहीं कठिन हो जाएगा।
दैनिक प्रबंधन के लिए Docker कमांड्स में महारत चाहिए?ये 18 आवश्यक Docker कमांड आपकी उत्पादकता बढ़ाएँगे।
सामान्य समस्याओं का ट्रबलशूटिंग
सही इंस्टॉलेशन के बावजूद, Docker में ऐसी दिक्कतें आ सकती हैं जो कंटेनरों को सही से चलने नहीं देतीं। यहाँ सबसे आम समस्याएँ हैं और उन्हें तुरंत कैसे ठीक करें।
परमिशन त्रुटियाँ
ज्यादातर Docker परमिशन समस्याएँ इस बात पर आ टिकती हैं कि आपके यूज़र के पास Docker के सॉकेट फ़ाइल तक सही पहुँच नहीं है। जब आपको Got permission denied while trying to connect to the Docker daemon socket दिखे, तो इसका अर्थ है कि आप अभी docker समूह में शामिल नहीं हैं।
ऐसा इसलिए होता है क्योंकि Docker root के रूप में चलता है, लेकिन वह ऐसा सॉकेट बनाता है जिसे docker समूह के सदस्य एक्सेस कर सकते हैं। खुद को समूह में जोड़ें:
कंटेनरों के अंदर फ़ाइल परमिशन त्रुटियाँ अलग होती हैं लेकिन उतनी ही आम। ये तब होती हैं जब कंटेनर प्रक्रिया उन फ़ाइलों को पढ़/लिख नहीं पाती जिन्हें आपने अपने होस्ट सिस्टम से माउंट किया है। कंटेनर किसी ऐसे यूज़र ID के रूप में चल रहा हो सकता है जो आपकी फ़ाइलों का मालिक नहीं है।
यदि आप AppArmor की बजाय SELinux चला रहे हैं, तो आपको अलग तरह की परमिशन डिनायल दिख सकती हैं जो ऑडिट लॉग में दर्ज होती हैं। ये अधिक जटिल होती हैं क्योंकि SELinux यूज़र ID के बजाय सुरक्षा संदर्भों के आधार पर नियंत्रित करता है कि प्रक्रियाएँ कहाँ पहुँच सकती हैं।
Docker वॉल्यूम पर उचित लेबल बहाल कर और कंटेनर प्रबंधन सक्षम कर SELinux संदर्भ ठीक करें:
sudo setsebool -P container_manage_cgroup on
sudo restorecon -R /path/to/your/volumeसंचालित द्वारा
सर्विस फेल्योर
जब Docker शुरू नहीं होता या बार-बार क्रैश करता है, तो उसे ठीक करने से पहले यह समझना ज़रूरी है कि विफल क्या हो रहा है। systemd सर्विस स्टेटस आपको त्वरित ओवरव्यू देता है:
यह दिखाता है कि Docker चल रहा है या नहीं और हालिया त्रुटि संदेश क्या हैं। लेकिन विस्तृत ट्रबलशूटिंग के लिए, Docker के शुरू होने की कोशिश के दौरान लाइव लॉग देखें:
एक आम स्टार्टअप फेल्योर तब होता है जब Docker साफ़-सुथरे ढंग से बंद नहीं हुआ। आपको ऐसा एरर दिखेगा: "failed to start daemon: pid file found, ensure docker is not running." इसका मतलब है कि कोई बची-खुची प्रोसेस फ़ाइल स्टार्टअप स्क्रिप्ट को भ्रमित कर रही है।
बासी फ़ाइल हटाएँ और फिर से शुरू करने की कोशिश करें:
sudorm /var/run/docker.pid
sudo systemctl start dockerसंचालित द्वारा
स्टोरेज समस्याएँ डेमन फेल्योर का एक और सामान्य कारण हैं। Docker अपना सारा डेटा /var/lib/docker में रखता है, और यदि यह डायरेक्टरी स्पेस से बाहर हो जाए या करप्ट हो जाए, तो Docker ठीक से शुरू नहीं हो पाएगा।
नेटवर्क संघर्ष भी Docker को शुरू होने से रोक सकते हैं। ऐसा तब होता है जब Docker का डिफ़ॉल्ट ब्रिज नेटवर्क (आमतौर पर 172.17.0.0/16) आपके मौजूदा नेटवर्क सेटअप से टकरा जाता है। आपको एड्रेस रेंज उपलब्ध न होने से जुड़े एरर दिखेंगे।
इसे किसी ऐसे कस्टम ब्रिज IP को कॉन्फ़िगर कर ठीक करें जो आपके नेटवर्क से टकराता न हो। /etc/docker/daemon.json संपादित करें:
Docker कंटेनरीकरण, नेटवर्किंग और सुरक्षा के लिए Linux कर्नेल फ़ीचर पर निर्भर करता है। यदि आपका कर्नेल बहुत पुराना है, तो ऐसी समस्याएँ मिलेंगी जिन्हें अपग्रेड किए बिना ठीक नहीं किया जा सकता।
आप कौन-सा कर्नेल संस्करण चला रहे हैं, यह कमांड चलाकर जाँचें:
बेसिक कार्यक्षमता के लिए Docker को कम से कम 3.10 कर्नेल चाहिए, लेकिन प्रोडक्शन उपयोग के लिए वास्तव में 4.0 या नया बेहतर है। 3.10 से पुराना कुछ भी आधुनिक Docker संस्करणों के साथ काम नहीं करेगा।
Debian पर कर्नेल को अपडेट करना आसान है, बस नवीनतम कर्नेल पैकेज इंस्टॉल करें:
sudoapt update
sudoaptinstall linux-image-amd64संचालित द्वारा
नया कर्नेल तब तक सक्रिय नहीं होगा जब तक आप सिस्टम रीबूट नहीं कर लेते:
कभी-कभी कर्नेल नया तो होता है, लेकिन कुछ कर्नेल मॉड्यूल लोड नहीं होते। Docker को नेटवर्किंग और कंटेनरीकरण फ़ीचर के लिए विशिष्ट मॉड्यूल चाहिए। आपको नेटवर्क इंटरफ़ेस उपलब्ध न होने या कंटेनर ठीक से शुरू न होने जैसे एरर दिखेंगे।
आवश्यक मॉड्यूल मैन्युअली लोड करें:
sudo modprobe bridge
sudo modprobe ip_tables
sudo modprobe iptable_natसंचालित द्वारा
ये मॉड्यूल स्वत: लोड हो जाने चाहिए, लेकिन यदि नहीं होते, तो उन्हें स्थायी बनाने के लिए अपनी सिस्टम कॉन्फ़िगरेशन में जोड़ दें:
echo"bridge"|sudotee-a /etc/modules
echo"ip_tables"|sudotee-a /etc/modules
echo"iptable_nat"|sudotee-a /etc/modulesसंचालित द्वारा
ताज़ा कर्नेल होने पर भी, आपको कभी-कभी "operation not supported" जैसे कंटेनर रनटाइम एरर मिल सकते हैं। आम तौर पर इसका मतलब है कि आपका कर्नेल कुछ ऐसे फ़ीचर के बिना कंपाइल हुआ है जिनकी Docker अपेक्षा करता है। दुर्भाग्यवश, गायब कर्नेल फ़ीचर के लिए कोई वर्कअराउंड नहीं—आपको सही तरीके से कॉन्फ़िगर किया हुआ कर्नेल चाहिए।
अधिकांश Docker इंस्टॉलेशन समस्याएँ इन्हीं तीन क्षेत्रों तक सिमटती हैं: यूज़र परमिशन, सर्विस कॉन्फ़िगरेशन, या कर्नेल अनुकूलता। लक्षणों को घुमाने के बजाय मूल समस्या ठीक करें, आपका Docker वातावरण अधिक स्थिर होगा।
कभी-कभी आपको अपने सिस्टम से Docker को पूरी तरह हटाने की ज़रूरत होती है—चाहे आप किसी और कंटेनर रनटाइम पर स्विच कर रहे हों या कॉन्फ़िगरेशन समस्याओं के बाद नया सिरे से शुरुआत करना चाहते हों।
यह प्रक्रिया केवल पैकेज हटाने से बढ़कर है—आप डेटा और सिस्टम परिवर्तनों की सफाई भी करना चाहेंगे।
शुरुआत अपने सिस्टम से सभी Docker पैकेज हटाने से करें। सटीक कमांड इस पर निर्भर करेगा कि आपने Docker मूल रूप से कैसे इंस्टॉल किया था।
यदि आपने आधिकारिक Docker रिपोजिटरी से इंस्टॉल किया था:
sudoapt purge docker-ce docker-ce-cli containerd.io docker-compose-pluginसंचालित द्वारा
यदि आपने Debian की डिफ़ॉल्ट रिपोजिटरी से इंस्टॉल किया था:
यह पैकेजों को हटा देता है, लेकिन वे कॉन्फ़िगरेशन फ़ाइलें और निर्भरताएँ छोड़ देता है जिनकी अन्य पैकेजों को अभी भी आवश्यकता हो सकती है। उन्हें भी हटाने के लिए:
इसके बाद, Docker की डेटा निर्देशिका हटाएँ यदि आप सभी इमेज, कंटेनर और वॉल्यूम हटाना चाहते हैं। यह चरण वैकल्पिक है, लेकिन पूर्ण सफ़ाई के लिए अनुशंसित है।
डिफ़ॉल्ट रूप से Docker सब कुछ /var/lib/docker में संग्रहीत करता है। इस निर्देशिका को हटाने से आपके सभी कंटेनर, इमेज, नेटवर्क और वॉल्यूम स्थायी रूप से हट जाते हैं:
आगे बढ़ें और सिस्टम समूहों और उपयोगकर्ताओं की सफ़ाई करें जिन्हें Docker ने इंस्टॉलेशन के दौरान बनाया था। Docker आपके सिस्टम में एक docker समूह जोड़ता है और उपयोगकर्ता अनुमतियों में बदलाव कर सकता है।
यदि आपने उपयोगकर्ताओं को docker समूह में जोड़ा है, तो समूह हटाने पर उनकी सदस्यता अपने-आप साफ़ हो जाएगी। लेकिन आप इसे हटाने से पहले विशिष्ट उपयोगकर्ताओं को समूह से मैन्युअल रूप से भी हटा सकते हैं:
अब आपके Debian पर Docker चल रहा है, पर इंस्टॉलेशन तो बस शुरुआत है। आप अपना Docker वातावरण कैसे कॉन्फ़िगर और मेंटेन करते हैं, यही तय करता है कि आपका प्रोडक्शन अनुभव सुचारू रहेगा या आप रातों को कंटेनर समस्याओं का समाधान करते रहेंगे।
अपनी बाधाओं के आधार पर इंस्टॉलेशन विधि चुनें। अधिकांश प्रोडक्शन वातावरण के लिए आधिकारिक Docker रिपोजिटरी सर्वोत्तम है क्योंकि इससे आपको नवीनतम फ़ीचर और सुरक्षा पैच मिलते हैं। लेकिन एयर-गैप्ड नेटवर्क या वर्शन संगति आवश्यकताओं के कारण आपको इसके बजाय मैन्युअल DEB इंस्टॉलेशन की ज़रूरत पड़ सकती है।
अपने Docker वातावरण को तुरंत सुरक्षित करें। अनिवार्य ऐक्सेस कंट्रोल के लिए AppArmor या SELinux सक्षम करें, प्रतिबंधात्मक डेमॉन सेटिंग्स कॉन्फ़िगर करें, और कंटेनर संसाधनों को सीमित करने के लिए cgroups का उपयोग करें। Docker को स्वत: सुरक्षा अद्यतनों के साथ अपडेट रखें, लेकिन पहले उन्हें स्टेजिंग में टेस्ट करें।
मल्टी-कंटेनर एप्लिकेशनों के लिए Docker Compose का उपयोग करें। जटिल docker run कमांड प्रबंधित करने के बजाय, अपनी एप्लिकेशन स्टैक को YAML में परिभाषित करें।
डिस्क उपयोग की निगरानी करें और नियमित रूप से सफ़ाई करें। अप्रयुक्त इमेज हटाने के लिए docker system prune चलाएँ और लॉग रोटेशन सेट करें ताकि कंटेनर आपकी डिस्क न भर दें।
जब आपको और विस्तृत जानकारी चाहिए, तो आधिकारिक दस्तावेज़ीकरण उन उन्नत विषयों को कवर करता है जिन्हें यह गाइड नहीं छूती। नेटवर्किंग, स्टोरेज ड्राइवर और ऑर्केस्ट्रेशन में गहराई से जानने के लिए Docker प्रलेखन देखें। Debian Docker पैकेज प्रलेखन पैकेज-विशिष्ट कॉन्फ़िगरेशन और ज्ञात समस्याएँ समझाता है।
Debian पर Docker आपको कंटेनरीकृत एप्लिकेशनों के लिए एक स्थिर, शक्तिशाली प्लेटफ़ॉर्म देता है — लेकिन तभी, जब आप इसे सोच-समझकर कॉन्फ़िगर करें और निरंतर मेंटेन रखें।
Docker, कंटेनरीकरण, और डेटा साइंस व मशीन लर्निंग में इसके उपयोग के बारे में अधिक सीखना चाहते हैं? ये DataCamp कोर्स आपके लिए अगला सर्वश्रेष्ठ पड़ाव हैं:
क्रोएशिया में स्थित सीनियर डेटा साइंटिस्ट। 700 से अधिक प्रकाशित लेखों के साथ टॉप टेक राइटर, जिनसे 10M+ व्यूज़ प्राप्त हुए। Machine Learning Automation with TPOT के पुस्तक लेखक।
FAQs
प्रोडक्शन उपयोग के लिए Debian पर Docker इंस्टॉल करने का सबसे अच्छा तरीका क्या है?⌄
प्रोडक्शन वातावरण के लिए आधिकारिक Docker रिपोजिटरी विधि सबसे अच्छा विकल्प है क्योंकि यह नवीनतम स्थिर रिलीज़ नियमित सुरक्षा अपडेट के साथ प्रदान करती है। इस विधि से आपको वे सभी नए फ़ीचर और अहम पैच मिलते हैं जो Debian की डिफ़ॉल्ट रिपोजिटरी में उपलब्ध न हों। आप अपने पैकेज मैनेजर के माध्यम से स्वत: अपडेट का लाभ भी उठाते हैं, जिससे बिना मैन्युअल हस्तक्षेप के आपकी Docker इंस्टॉलेशन सुरक्षित रहती है।
Debian पर Docker चलाते समय क्या मुझे सुरक्षा को लेकर चिंतित होना चाहिए?⌄
हाँ, Docker सुरक्षा के लिए बेसिक इंस्टॉलेशन से आगे सोच-समझकर कॉन्फ़िगरेशन करना ज़रूरी है। कंटेनर होस्ट कर्नेल साझा करते हैं, इसलिए यदि कंटेनर से समझौता होता है और उसे ठीक से आइसोलेट नहीं किया गया है, तो वह होस्ट संसाधनों तक पहुँच सकता है। आपको अनिवार्य ऐक्सेस कंट्रोल के लिए AppArmor या SELinux सक्षम करना चाहिए, cgroups से संसाधन सीमाएँ कॉन्फ़िगर करनी चाहिए, और जहाँ संभव हो कंटेनर को non-root उपयोगकर्ता के रूप में चलाना चाहिए। इसके अलावा, Docker को अद्यतन रखें और केवल अत्यावश्यक होने पर ही उपयोगकर्ताओं को docker समूह में जोड़ें, क्योंकि इससे उन्हें रूट-समतुल्य सिस्टम ऐक्सेस मिल जाता है।
क्या मैं Debian के पुराने संस्करणों पर Docker चला सकता/सकती हूँ?⌄
वर्तमान Docker Engine संस्करणों के लिए Docker को Debian 10 (Buster) या नया चाहिए। Debian 9 जैसे पुराने रिलीज़ में वे आवश्यक कर्नेल फ़ीचर और पैकेज निर्भरताएँ नहीं हैं जो आधुनिक Docker को चाहिए। यदि आप पुराने Debian संस्करण पर अटके हैं, तो आपको पहले अपना सिस्टम अपग्रेड करना होगा, क्योंकि कंटेनरीकरण और नेटवर्किंग के लिए Docker जिस कर्नेल फ़ंक्शनलिटी पर निर्भर है, उसके अभाव का कोई विश्वसनीय समाधान नहीं है।
इंस्टॉलेशन के बाद Docker शुरू होने में क्यों विफल रहता है, और डेमॉन समस्याएँ कैसे ठीक करूँ?⌄
Docker डेमॉन विफलताएँ आमतौर पर तीन मुख्य कारणों से होती हैं: स्टोरेज समस्याएँ, नेटवर्क संघर्ष, या पिछले इंस्टॉलेशन से बचे हुए प्रोसेस फ़ाइलें। /var/lib/docker में पर्याप्त डिस्क स्पेस है या नहीं, यह df -h /var/lib/docker से जाँचें, और आवश्यकता हो तो docker system prune -a से सफ़ाई करें। नेटवर्क संघर्ष के लिए, Docker का डिफ़ॉल्ट ब्रिज IP (172.17.0.0/16) आपके मौजूदा नेटवर्क सेटअप से टकरा सकता है, ऐसे में आपको /etc/docker/daemon.json में कस्टम ब्रिज IP कॉन्फ़िगर करना होगा। यदि "pid file found" जैसी त्रुटियाँ दिखें, तो sudo rm /var/run/docker.pid से स्टेल फ़ाइल हटाएँ और सेवा को पुनः आरंभ करें।
मैं अपने Debian सिस्टम से Docker और उसका सारा डेटा ठीक तरह से कैसे हटाऊँ?⌄
Docker को पूरी तरह हटाने के लिए केवल पैकेज अनइंस्टॉल करना पर्याप्त नहीं है — आपको डेटा निर्देशिकाएँ, सिस्टम समूह और सेवा फ़ाइलें भी साफ़ करनी होंगी। शुरुआत करें sudo apt purge docker-ce docker-ce-cli containerd.io docker-compose-plugin से Docker पैकेज पर्ज करके, फिर sudo rm -rf /var/lib/docker से डेटा निर्देशिका हटाएँ (यह सभी कंटेनर और इमेज स्थायी रूप से हटाता है)। sudo groupdel docker से docker समूह हटाएँ, systemd सेवा फ़ाइलें हटाएँ, और ps aux | grep docker से बचे हुए किसी भी Docker प्रोसेस की जाँच करें। यदि आपको दोबारा इंस्टॉल करना हो या किसी अन्य कंटेनर रनटाइम पर स्विच करना हो, तो यह एक साफ़ सलेट सुनिश्चित करता है।
Debian पर Docker इंस्टॉल करना ऐसा काम नहीं होना चाहिए जहाँ आपको अंदाज़ा लगाना पड़े कि कौन-सा तरीका आपके सिस्टम को नहीं तोड़ेगा।
अधिकांश गाइड कई इंस्टॉलेशन विकल्प थमा देते हैं, बिना यह बताए कि किसे कब इस्तेमाल करें। नतीजतन आप Debian की रिपोजिटरी से आउटडेटेड पैकेज ले आते हैं, या इससे भी बुरा—ऐसी परमिशन त्रुटियाँ मिलती हैं जो आपको अपने ही कंटेनरों से बाहर कर देती हैं। परिणाम? एप्लिकेशन डिप्लॉय करने के बजाय आप घंटों ट्रबलशूटिंग में लगा देते हैं।
Debian का पूर्वानुमेय रिलीज़ साइकिल और चट्टान-सी स्थिरता इसे प्रोडक्शन Docker डिप्लॉयमेंट के लिए बेहतरीन बनाती है। आपको लगातार कंटेनर परफ़ॉर्मेंस मिलता है, बिना किसी अचानक सिस्टम अपडेट के जो आपकी सेटअप तोड़ दे। सिद्धांततः, सबसे पेचीदा भाग—इंस्टॉलेशन—के बाद आपको परेशानी नहीं आनी चाहिए।
इस ट्यूटोरियल में, मैं आपको चार इंस्टॉलेशन तरीकों, आवश्यक सुरक्षा सख्तीकरण, स्टोरेज कॉन्फ़िगरेशन, और ट्रबलशूटिंग चरणों से गुजारूँगा ताकि Debian पर Docker भरोसेमंद तरीके से चले।
Docker में बिल्कुल नए हैं? Docker की बुनियादी जानकारी से शुरुआत करें और फिर इंस्टॉलेशन स्टेप्स पर आएँ।
सिस्टम आवश्यकताएँ
Docker अधिकांश आधुनिक Debian सिस्टम पर चलता है, लेकिन शुरू करने से पहले कुछ चीज़ें जाँचनी होंगी। इस अनुभाग में, मैं आपको ठीक-ठीक सिस्टम आवश्यकताएँ दिखाऊँगा।
Debian 10 (Buster) या नया वर्तमान Docker संस्करणों के लिए आवश्यक है। Debian 9 जैसे पुराने रिलीज़ हालिया Docker Engine बिल्ड के साथ काम नहीं करेंगे। आपका कर्नेल संस्करण 3.10 या उससे अधिक होना चाहिए—पिछले कुछ वर्षों की अधिकांश Debian इंस्टॉलेशन यह आवश्यकता अपने आप पूरी करती हैं।
आपको root एक्सेस या sudo विशेषाधिकार चाहिए ताकि Docker पैकेज इंस्टॉल कर सकें और सिस्टम कॉन्फ़िगर कर सकें। Docker को ये कोर पैकेज भी चाहिए:
apt-transport-https,ca-certificates,curl, औरgnupg। अधिकांश Debian सिस्टम में ये इंस्टॉल होते हैं, लेकिन आप इसे आगे सत्यापित करेंगे।हार्डवेयर आवश्यकताएँ न्यूनतम हैं:
यदि आप GNOME डेस्कटॉप वातावरण चला रहे हैं, सुनिश्चित करें कि
gnome-terminalपैकेज इंस्टॉल है। कुछ Docker प्रबंधन टूल इंटरैक्टिव कंटेनर सेशन के लिए इसकी अपेक्षा करते हैं।शुरू करने से पहले पुराने Docker इंस्टॉलेशन हटा दें।
docker,docker.io, याdocker-engineजैसे लेगेसी पैकेज वर्तमान Docker Engine से टकरा सकते हैं। पुराने संस्करणों की सफाई के लिए यह कमांड चलाएँ:आपकी फ़ायरवॉल और नेटवर्क सेटिंग्स कंटेनर नेटवर्किंग को प्रभावित कर सकती हैं। Docker अपने स्वयं के नेटवर्क इंटरफ़ेस और iptables नियम बनाता है। यदि आप UFW या कस्टम फ़ायरवॉल नियमों का उपयोग करते हैं, तो इंस्टॉलेशन के बाद कंटेनर ट्रैफ़िक की अनुमति देने के लिए उन्हें समायोजित करना पड़ सकता है।
इन आवश्यकताओं की अभी जाँच कर लें—यह आगे चलकर आपका ट्रबलशूटिंग समय बचाएगा।
इंस्टॉलेशन के तरीके
Debian पर Docker इंस्टॉल करने के चार तरीके हैं, और प्रत्येक के अपने समझौते हैं। मैं आपकी परिवेश और सुरक्षा आवश्यकताओं के अनुसार सही तरीका चुनने में मदद करूँगा।
उबंटू के लिए इंस्टॉलेशन निर्देश खोज रहे हैं? हमारे पास Ubuntu पर Docker इंस्टॉल करने की चरण-दर-चरण गाइड है।
तरीका 1: आधिकारिक Docker रिपोजिटरी (अनुशंसित)
यह तरीका आपको नियमित सुरक्षा अपडेट के साथ नवीनतम Docker संस्करण देता है।
Docker की आधिकारिक रिपोजिटरी में हमेशा सबसे नए स्थिर रिलीज़ होते हैं, और आपको अपने पैकेज मैनेजर के जरिए स्वत: अपडेट मिलते हैं। इस तरह आप पुराने संस्करणों में नहीं अटकते जो महत्वपूर्ण सुरक्षा पैच या नई सुविधाओं से वंचित हों।
सबसे पहले अपने सिस्टम को अपडेट करें और वे पैकेज इंस्टॉल करें जिनकी Docker को ज़रूरत है:
फिर, पैकेज की प्रामाणिकता जाँचने के लिए Docker की आधिकारिक GPG कुंजी जोड़ें:
रिपोजिटरी को अपने sources list में जोड़कर कॉन्फ़िगर करें:
अंत में, Docker Engine, CLI, और Compose इंस्टॉल करें:
यह आपको प्रोडक्शन Docker डिप्लॉयमेंट के लिए आवश्यक सब कुछ दे देता है।
तरीका 2: डिफ़ॉल्ट Debian रिपोजिटरी
यह तरीका एक कमांड में Docker इंस्टॉल कर देता है, लेकिन आपको पुराना संस्करण मिलेगा।
Debian की डिफ़ॉल्ट रिपोजिटरी इंस्टॉलेशन को सरल बनाती है—बस
sudo apt install docker.ioचलाएँ। लेकिन एक पेंच है: अक्सर आपको Docker के ऐसे संस्करण मिलेंगे जो मौजूदा रिलीज़ से महीनों या वर्षों पुराने हैं।यह तरीका बेसिक टेस्टिंग के लिए ठीक है या तब जब आपको अनुकूलता के लिए कोई खास पुराना संस्करण चाहिए। लेकिन आप हालिया Docker रिलीज़ के साथ आने वाले सुरक्षा अपडेट, परफ़ॉर्मेंस सुधार, और नई सुविधाओं से चूक जाएँगे।
जब आधिकारिक रिपोजिटरी विकल्प न हो, तभी इस तरीके का उपयोग करें।
तरीका 3: मैनुअल DEB पैकेज इंस्टॉलेशन
जब आप रिपोजिटरी तक पहुँच नहीं पा रहे हों, तब पैकेज सीधे डाउनलोड और इंस्टॉल करने का तरीका मैं दिखाऊँगा।
यह तरीका एयर-गैप्ड सिस्टम, सख्त इंटरनेट एक्सेस वाली कॉर्पोरेट नेटवर्क, या कई मशीनों पर एक ही Docker संस्करण बार-बार डाउनलोड किए बिना इंस्टॉल करने के लिए काम आता है।
Docker की वेबसाइट से DEB पैकेज डाउनलोड करें:
https://download.docker.com/linux/debian/dists/पर जाएँअपना Debian संस्करण चुनें (bullseye, bookworm, आदि)
pool/stable/amd64/पर जाएँये पैकेज डाउनलोड करें:
docker-ce_*.deb,docker-ce-cli_*.deb, औरcontainerd.io_*.debपैकेज इसी क्रम में इंस्टॉल करें:
यदि निर्भरताओं से जुड़ी त्रुटि मिले, तो उन्हें ठीक करने के लिए
sudo apt-get install -fचलाएँ।अपडेट के लिए इस तरीके में अधिक मैनुअल काम होता है, लेकिन इससे आप कौन-सा संस्करण इंस्टॉल हो रहा है इस पर पूरा नियंत्रण पाते हैं।
तरीका 4: सुविधा स्क्रिप्ट्स
आख़िरी तरीका टेस्ट वातावरण के लिए तेज़ इंस्टॉलेशन देता है, लेकिन पहले स्क्रिप्ट का ऑडिट कर लें।
Docker ऐसी इंस्टॉलेशन स्क्रिप्ट देता है जो आपके सिस्टम का पता लगाकर स्वत: Docker इंस्टॉल कर देता है। ये टेस्ट वातावरण जल्दी तैयार करने या कई सिस्टम पर Docker सेटअप करने के समय काम आती हैं।
स्क्रिप्ट चलाने से पहले हमेशा उसे देखें:
कुछ संदिग्ध या अप्रत्याशित चीज़ें तो नहीं हैं, इसे देखें। स्क्रिप्ट आपकी सिस्टम कॉन्फ़िगरेशन बदलेगी, तो आपको पता होना चाहिए कि वह क्या कर रही है।
समीक्षा के बाद स्क्रिप्ट चलाएँ:
प्रोडक्शन में सुविधा स्क्रिप्ट्स का उपयोग न करें। ये तेज़ सेटअप के लिए बनी हैं, सुरक्षित और पुनरुत्पादन योग्य डिप्लॉयमेंट के लिए नहीं। जिन सिस्टमों की परवाह है, वहाँ आधिकारिक रिपोजिटरी वाले तरीके पर टिके रहें।
मैं अनुशंसा करता हूँ कि जब तक कोई विशिष्ट बाधा न हो, आधिकारिक रिपोजिटरी वाला तरीका ही चुनें।
अपनी इंस्टॉलेशन की जाँच
इंस्टॉलेशन तो पहला कदम है—डिप्लॉय करने से पहले आपको यह पक्का करना होगा कि Docker वास्तव में काम कर रहा है। ये त्वरित परीक्षण बताएँगे कि आपका Docker सेटअप असली वर्कलोड के लिए तैयार है या नहीं।
अपना Docker संस्करण जाँचें ताकि पुष्टि हो कि इंस्टॉलेशन पूरा हुआ:
आपको
Docker version xx.x.x, build xजैसा आउटपुट दिखेगा। यदि "command not found" त्रुटि मिले, तो Docker सही से इंस्टॉल नहीं हुआ या आपके PATH में नहीं है।क्या-क्या चल रहा है यह देखने के लिए विस्तृत बिल्ड जानकारी लें:
यह अलग-अलग क्लाइंट और सर्वर संस्करण के साथ आर्किटेक्चर विवरण दिखाता है। सर्वर सेक्शन पुष्टि करता है कि Docker डेमन चल रहा है और सुलभ है।
एक टेस्ट कंटेनर चलाएँ ताकि एंड-टू-एंड सब कुछ सत्यापित हो जाए:
Docker hello-world इमेज डाउनलोड करेगा और उसे चलाएगा। यदि सब ठीक रहा, तो आपको एक संदेश दिखेगा जो बताता है कि Docker कंटेनर कैसे काम करते हैं। यह परीक्षण पुष्टि करता है कि Docker इमेज खींच सकता है, कंटेनर बना सकता है, और कमांड चला सकता है।
आप जाँच सकते हैं कि Docker Compose इंस्टॉल है और काम कर रहा है:
आपको
Docker Compose version vX.xx.xजैसा आउटपुट दिखना चाहिए। ध्यान दें कि नए Docker इंस्टॉलेशनdocker-composeकी बजायdocker compose(बीच में स्पेस) का इस्तेमाल करते हैं।यदि ये सभी कमांड बिना त्रुटि के चलती हैं, तो आपका Docker इंस्टॉलेशन प्रोडक्शन उपयोग के लिए तैयार है।
अपना पहला वास्तविक कंटेनर चलाने के लिए तैयार हैं? स्टेप-बाय-स्टेप Docker इमेज चलाना सीखें।
पोस्ट-इंस्टॉलेशन कॉन्फ़िगरेशन
Docker बॉक्स से बाहर काम करता है, लेकिन दैनिक उपयोग के लिए कुछ चीज़ें कॉन्फ़िगर करना चाहेंगे। इस अनुभाग में, मैं सर्विस प्रबंधन और उपयोगकर्ता अनुमतियों को कवर करूँगा जो Docker को अधिक सुविधाजनक और सुरक्षित बनाते हैं।
सर्विस मैनेजमेंट
आप इन systemd कमांड से नियंत्रित कर सकते हैं कि Docker कब चले:
जब आपका सिस्टम बूट हो तो Docker को स्वत: शुरू करने के लिए, यह चलाएँ:
यह सुनिश्चित करता है कि हर बार सर्वर रीस्टार्ट होने पर Docker चले, जो प्रोडक्शन सिस्टम के लिए वांछनीय है।
यदि आपको जाँचना है कि Docker चल रहा है या नहीं और उसकी मौजूदा स्थिति देखनी है, यह कमांड चलाएँ:
आप देखेंगे कि सर्विस सक्रिय है या नहीं, कब से चल रही है, और हालिया लॉग संदेश क्या हैं। यदि Docker काम नहीं कर रहा, तो आमतौर पर यही कमांड वजह दिखा देती है।
सर्विस से जुड़ी समस्याओं को ट्रबलशूट करने के लिए लॉग देखें:
यह विस्तृत Docker डेमन लॉग दिखाता है, जो स्टार्टअप समस्याएँ, परमिशन त्रुटियाँ, या कॉन्फ़िगरेशन मुद्दों का निदान करने में मदद करते हैं।
नॉन-रूट यूज़र एक्सेस
यदि आपको अपने यूज़र को docker समूह में जोड़ना है ताकि sudo के बिना Docker कमांड चला सकें:
यह आपके मौजूदा यूज़र को
dockerसमूह में जोड़ता है, जिससे आपको Docker डेमन से संवाद करने की अनुमति मिलती है।ग्रुप परिवर्तन प्रभावी करने के लिए आपको लॉग आउट कर फिर लॉग इन करना होगा:
वैकल्पिक रूप से, अपना टर्मिनल सेशन रीस्टार्ट करें। आप
newgrp dockerभी चला सकते हैं ताकि बिना लॉग आउट किए मौजूदा सेशन में ही समूह सक्रिय हो जाए।अंत में, नॉन-रूट एक्सेस जाँचने के लिए यह Docker कमांड चलाएँ:
यदि यह sudo के बिना काम करता है, तो सब ठीक है।
लेकिन सुरक्षा का यह समझौता याद रखें: docker समूह के यूज़र को आपके सिस्टम पर लगभग root-जैसी पहुँच मिलती है। वे होस्ट डायरेक्टरी माउंट कर सकते हैं, संवेदनशील फ़ाइलों तक पहुँच सकते हैं, और संभावित रूप से कंटेनरों से बाहर निकलकर होस्ट से समझौता कर सकते हैं।
केवल विश्वसनीय यूज़र्स को ही docker समूह में जोड़ें, और साझा सिस्टम पर जहाँ सभी यूज़र आपके नियंत्रण में नहीं हैं, ऐसा कभी न करें।
इन सेटिंग्स को एक बार कॉन्फ़िगर कर लें, Docker के साथ रोज़मर्रा का काम कहीं आसान हो जाता है।
स्टोरेज ड्राइवर कॉन्फ़िगरेशन
Docker का स्टोरेज ड्राइवर यह प्रबंधित करता है कि कंटेनर इमेज और डेटा आपके सिस्टम पर कैसे संग्रहित हों। अधिकांश यूज़र को इसे बदलने की ज़रूरत नहीं पड़ती, लेकिन अपने विकल्प समझना विशेष वर्कलोड के लिए परफ़ॉर्मेंस अनुकूल बनाने में मदद करता है।
Docker इंस्टॉलेशन के दौरान अपने आप आपके सिस्टम के लिए सर्वश्रेष्ठ स्टोरेज ड्राइवर चुनता है। Debian पर यह आम तौर पर
overlay2होता है, जो अधिकांश उपयोग मामलों के लिए उत्कृष्ट परफ़ॉर्मेंस और स्थिरता देता है।अपना मौजूदा स्टोरेज ड्राइवर इस कमांड से जाँचें:
overlay2ड्राइवर अच्छा काम करता है क्योंकि यह:यदि आप विशेष वर्कलोड चला रहे हैं या आपके पास विशिष्ट फ़ाइलसिस्टम आवश्यकताएँ हैं, तो आपको अलग स्टोरेज ड्राइवर चाहिए हो सकता है।
उदाहरण के लिए, कुछ एंटरप्राइज़ स्टोरेज सिस्टम
devicemapperड्राइवर के साथ बेहतर काम करते हैं, या आपको कंटेनर फ़ाइलसिस्टम समस्याओं की डीबगिंग के लिएvfsचाहिए हो सकता है।आप Docker के डेमन कॉन्फ़िगरेशन को संपादित करके स्टोरेज ड्राइवर बदल सकते हैं:
यहाँ, storage-driver सेटिंग जोड़ें या संशोधित करें:
अंत में, परिवर्तन लागू करने के लिए Docker रीस्टार्ट करना याद रखें:
ध्यान रहे, स्टोरेज ड्राइवर बदलने से आपके मौजूदा कंटेनर और इमेज अप्राप्य हो जाती हैं। पहले महत्वपूर्ण डेटा का बैकअप लें, या जिन कंटेनरों को रखना है उन्हें एक्सपोर्ट करें।
अब आप नई ड्राइवर जाँचने के लिए एक इमेज पुल कर कंटेनर चला सकते हैं:
संक्षेप में, जब तक किसी खास आवश्यकता की वजह से अलग ड्राइवर न माँगा जाए,
overlay2पर ही टिके रहें।सुरक्षा सख्तीकरण
डिफ़ॉल्ट Docker इंस्टॉलेशन डेवलपमेंट के लिए ठीक हैं, लेकिन प्रोडक्शन वातावरण में अतिरिक्त सुरक्षा परतें चाहिए होती हैं। ये कॉन्फ़िगरेशन आपके होस्ट सिस्टम को कंटेनर ब्रेकआउट और संसाधन-खपत हमलों से बचाते हैं।
SELinux/AppArmor एकीकरण
अनिवार्य एक्सेस कंट्रोल एक सुरक्षा परत जोड़ते हैं जो यह सीमित करती है कि कंटेनर क्या कर सकते हैं, भले ही वे समझौता कर लिए गए हों। इनके बिना, रूट के रूप में चल रहा कंटेनर संभावित रूप से उन होस्ट संसाधनों तक पहुँच सकता है, जहाँ उसे नहीं जाना चाहिए।
आप Docker के लिए AppArmor सक्षम कर सकते हैं, जो Debian का डिफ़ॉल्ट सुरक्षा फ़्रेमवर्क है, इन कमांड से:
AppArmor चलने के बाद, Docker की सुरक्षा प्रोफ़ाइल लोड करें:
अब आप AppArmor सुरक्षा सक्षम करके कंटेनर चला सकते हैं:
docker-defaultप्रोफ़ाइल कंटेनर की क्षमताओं को सीमित करती है, जैसे फ़ाइलसिस्टम माउंट करना, रॉ नेटवर्क इंटरफ़ेस की पहुँच, और कर्नेल मॉड्यूल लोड करना।SELinux सिस्टम के लिए (यदि आप AppArmor के बजाय इसका उपयोग कर रहे हैं), पहले कंटेनर प्रबंधन सक्षम करें:
फिर SELinux लेबल्स के साथ कंटेनर चलाएँ:
ये नियंत्रण कई सामान्य कंटेनर एस्केप तकनीकों को रोकते हैं और समझौता किए गए कंटेनरों से होने वाले नुकसान को सीमित करते हैं।
डेमन कॉन्फ़िगरेशन
आप Docker डेमन सेटिंग्स को अनुकूलित कर सकते हैं (और करना चाहिए) ताकि हमले की सतह घटे और सुरक्षा स्थिति बेहतर हो।
/etc/docker/daemon.jsonफ़ाइल बनाएँ या संपादित करें:हर सेटिंग क्या करती है, यह रहा:
live-restore: trueडेमन क्रैश होने पर भी कंटेनरों को चलता रखता हैuserland-proxy: falseबेहतर परफ़ॉर्मेंस के लिए userland प्रॉक्सी की जगह सीधे iptables का उपयोग करता हैno-new-privileges: trueकंटेनरों को नए विशेषाधिकार हासिल करने से रोकता हैicc: falseडिफ़ॉल्ट रूप से इंटर-कंटेनर कम्युनिकेशन को निष्क्रिय करता हैdisable-legacy-registry: trueपुराने, असुरक्षित रजिस्ट्री प्रोटोकॉल तक पहुँच को रोकता हैइन परिवर्तनों के बाद, उन्हें लागू करने के लिए Docker रीस्टार्ट करें:
जहाँ संभव हो, कंटेनर को नॉन-रूट यूज़र के रूप में चलाएँ:
यह सीमित करता है कि समझौता किए गए कंटेनर आपके सिस्टम के साथ क्या कर सकते हैं।
कंट्रोल ग्रुप (cgroups) के साथ संसाधन सीमाएँ
बिना संसाधन सीमा वाले कंटेनर उपलब्ध CPU, मेमोरी और I/O सब कुछ खपा सकते हैं और अंततः पूरे होस्ट सिस्टम को नीचे ला सकते हैं। कंट्रोल ग्रुप (cgroups) सख्त सीमाएँ लागू कर इसे रोकते हैं।
शुरुआत मेमोरी सीमा से करें ताकि कंटेनर अत्यधिक RAM न खाएँ:
आप CPU उपयोग भी सीमित कर सकते हैं ताकि कोई एक कंटेनर प्रोसेसिंग पावर पर कब्ज़ा न कर ले:
उच्च डिस्क I/O वाले सिस्टम पर, पढ़ने/लिखने की गति नियंत्रित करें:
पूर्ण संसाधन नियंत्रण के लिए आप एकाधिक सीमाएँ साथ में लगा सकते हैं:
सभी कंटेनरों पर एकसमान सीमाएँ लागू करने के लिए, daemon.json में डिफ़ॉल्ट कॉन्फ़िगर करें:
ये सीमाएँ संसाधन-खपत हमलों को रोकती हैं और कंटेनरों के बीच निष्पक्ष संसाधन साझा सुनिश्चित करती हैं।
इन सुरक्षा उपायों को एक बार कॉन्फ़िगर कर लें, आपका Docker वातावरण समझौता करना कहीं कठिन हो जाएगा।
दैनिक प्रबंधन के लिए Docker कमांड्स में महारत चाहिए? ये 18 आवश्यक Docker कमांड आपकी उत्पादकता बढ़ाएँगे।
सामान्य समस्याओं का ट्रबलशूटिंग
सही इंस्टॉलेशन के बावजूद, Docker में ऐसी दिक्कतें आ सकती हैं जो कंटेनरों को सही से चलने नहीं देतीं। यहाँ सबसे आम समस्याएँ हैं और उन्हें तुरंत कैसे ठीक करें।
परमिशन त्रुटियाँ
ज्यादातर Docker परमिशन समस्याएँ इस बात पर आ टिकती हैं कि आपके यूज़र के पास Docker के सॉकेट फ़ाइल तक सही पहुँच नहीं है। जब आपको
Got permission denied while trying to connect to the Docker daemon socketदिखे, तो इसका अर्थ है कि आप अभी docker समूह में शामिल नहीं हैं।ऐसा इसलिए होता है क्योंकि Docker root के रूप में चलता है, लेकिन वह ऐसा सॉकेट बनाता है जिसे docker समूह के सदस्य एक्सेस कर सकते हैं। खुद को समूह में जोड़ें:
परिवर्तन लागू करने के लिए आपको लॉग आउट कर फिर लॉग इन करना होगा। अभी लॉग आउट नहीं करना चाहते, तो मौजूदा सेशन में ही समूह सक्रिय करें:
कंटेनरों के अंदर फ़ाइल परमिशन त्रुटियाँ अलग होती हैं लेकिन उतनी ही आम। ये तब होती हैं जब कंटेनर प्रक्रिया उन फ़ाइलों को पढ़/लिख नहीं पाती जिन्हें आपने अपने होस्ट सिस्टम से माउंट किया है। कंटेनर किसी ऐसे यूज़र ID के रूप में चल रहा हो सकता है जो आपकी फ़ाइलों का मालिक नहीं है।
कौन-सा यूज़र आपकी फ़ाइलों का मालिक है, जाँचें:
अधिकांश Docker कंटेनर डिफ़ॉल्ट रूप से यूज़र ID 1000 के रूप में चलते हैं। यदि आपकी फ़ाइलें root या किसी अन्य यूज़र की हैं, तो ओनरशिप बदलें:
यदि आप AppArmor की बजाय SELinux चला रहे हैं, तो आपको अलग तरह की परमिशन डिनायल दिख सकती हैं जो ऑडिट लॉग में दर्ज होती हैं। ये अधिक जटिल होती हैं क्योंकि SELinux यूज़र ID के बजाय सुरक्षा संदर्भों के आधार पर नियंत्रित करता है कि प्रक्रियाएँ कहाँ पहुँच सकती हैं।
हालिया एक्सेस उल्लंघन ढूँढें:
Docker वॉल्यूम पर उचित लेबल बहाल कर और कंटेनर प्रबंधन सक्षम कर SELinux संदर्भ ठीक करें:
सर्विस फेल्योर
जब Docker शुरू नहीं होता या बार-बार क्रैश करता है, तो उसे ठीक करने से पहले यह समझना ज़रूरी है कि विफल क्या हो रहा है। systemd सर्विस स्टेटस आपको त्वरित ओवरव्यू देता है:
यह दिखाता है कि Docker चल रहा है या नहीं और हालिया त्रुटि संदेश क्या हैं। लेकिन विस्तृत ट्रबलशूटिंग के लिए, Docker के शुरू होने की कोशिश के दौरान लाइव लॉग देखें:
एक आम स्टार्टअप फेल्योर तब होता है जब Docker साफ़-सुथरे ढंग से बंद नहीं हुआ। आपको ऐसा एरर दिखेगा: "failed to start daemon: pid file found, ensure docker is not running." इसका मतलब है कि कोई बची-खुची प्रोसेस फ़ाइल स्टार्टअप स्क्रिप्ट को भ्रमित कर रही है।
बासी फ़ाइल हटाएँ और फिर से शुरू करने की कोशिश करें:
स्टोरेज समस्याएँ डेमन फेल्योर का एक और सामान्य कारण हैं। Docker अपना सारा डेटा
/var/lib/dockerमें रखता है, और यदि यह डायरेक्टरी स्पेस से बाहर हो जाए या करप्ट हो जाए, तो Docker ठीक से शुरू नहीं हो पाएगा।कितनी जगह उपलब्ध है, जाँचें:
यदि स्पेस कम है, तो पुराने कंटेनर और इमेज हटा दें जिनका आप उपयोग नहीं कर रहे:
नेटवर्क संघर्ष भी Docker को शुरू होने से रोक सकते हैं। ऐसा तब होता है जब Docker का डिफ़ॉल्ट ब्रिज नेटवर्क (आमतौर पर 172.17.0.0/16) आपके मौजूदा नेटवर्क सेटअप से टकरा जाता है। आपको एड्रेस रेंज उपलब्ध न होने से जुड़े एरर दिखेंगे।
इसे किसी ऐसे कस्टम ब्रिज IP को कॉन्फ़िगर कर ठीक करें जो आपके नेटवर्क से टकराता न हो।
/etc/docker/daemon.jsonसंपादित करें:परिवर्तन के बाद, नया नेटवर्क कॉन्फ़िगरेशन उपयोग करने के लिए Docker रीस्टार्ट करें:
पुराने कर्नेल से जुड़ी समस्याएँ
Docker कंटेनरीकरण, नेटवर्किंग और सुरक्षा के लिए Linux कर्नेल फ़ीचर पर निर्भर करता है। यदि आपका कर्नेल बहुत पुराना है, तो ऐसी समस्याएँ मिलेंगी जिन्हें अपग्रेड किए बिना ठीक नहीं किया जा सकता।
आप कौन-सा कर्नेल संस्करण चला रहे हैं, यह कमांड चलाकर जाँचें:
बेसिक कार्यक्षमता के लिए Docker को कम से कम 3.10 कर्नेल चाहिए, लेकिन प्रोडक्शन उपयोग के लिए वास्तव में 4.0 या नया बेहतर है। 3.10 से पुराना कुछ भी आधुनिक Docker संस्करणों के साथ काम नहीं करेगा।
Debian पर कर्नेल को अपडेट करना आसान है, बस नवीनतम कर्नेल पैकेज इंस्टॉल करें:
नया कर्नेल तब तक सक्रिय नहीं होगा जब तक आप सिस्टम रीबूट नहीं कर लेते:
कभी-कभी कर्नेल नया तो होता है, लेकिन कुछ कर्नेल मॉड्यूल लोड नहीं होते। Docker को नेटवर्किंग और कंटेनरीकरण फ़ीचर के लिए विशिष्ट मॉड्यूल चाहिए। आपको नेटवर्क इंटरफ़ेस उपलब्ध न होने या कंटेनर ठीक से शुरू न होने जैसे एरर दिखेंगे।
आवश्यक मॉड्यूल मैन्युअली लोड करें:
ये मॉड्यूल स्वत: लोड हो जाने चाहिए, लेकिन यदि नहीं होते, तो उन्हें स्थायी बनाने के लिए अपनी सिस्टम कॉन्फ़िगरेशन में जोड़ दें:
ताज़ा कर्नेल होने पर भी, आपको कभी-कभी "operation not supported" जैसे कंटेनर रनटाइम एरर मिल सकते हैं। आम तौर पर इसका मतलब है कि आपका कर्नेल कुछ ऐसे फ़ीचर के बिना कंपाइल हुआ है जिनकी Docker अपेक्षा करता है। दुर्भाग्यवश, गायब कर्नेल फ़ीचर के लिए कोई वर्कअराउंड नहीं—आपको सही तरीके से कॉन्फ़िगर किया हुआ कर्नेल चाहिए।
अधिकांश Docker इंस्टॉलेशन समस्याएँ इन्हीं तीन क्षेत्रों तक सिमटती हैं: यूज़र परमिशन, सर्विस कॉन्फ़िगरेशन, या कर्नेल अनुकूलता। लक्षणों को घुमाने के बजाय मूल समस्या ठीक करें, आपका Docker वातावरण अधिक स्थिर होगा।
कंटेनरों में डेटाबेस के साथ काम कर रहे हैं? Docker में PostgreSQL कॉन्फ़िगरेशन आपकी सोच से आसान है।
Docker अनइंस्टॉल करना
कभी-कभी आपको अपने सिस्टम से Docker को पूरी तरह हटाने की ज़रूरत होती है—चाहे आप किसी और कंटेनर रनटाइम पर स्विच कर रहे हों या कॉन्फ़िगरेशन समस्याओं के बाद नया सिरे से शुरुआत करना चाहते हों।
यह प्रक्रिया केवल पैकेज हटाने से बढ़कर है—आप डेटा और सिस्टम परिवर्तनों की सफाई भी करना चाहेंगे।
शुरुआत अपने सिस्टम से सभी Docker पैकेज हटाने से करें। सटीक कमांड इस पर निर्भर करेगा कि आपने Docker मूल रूप से कैसे इंस्टॉल किया था।
यदि आपने आधिकारिक Docker रिपोजिटरी से इंस्टॉल किया था:
यदि आपने Debian की डिफ़ॉल्ट रिपोजिटरी से इंस्टॉल किया था:
यह पैकेजों को हटा देता है, लेकिन वे कॉन्फ़िगरेशन फ़ाइलें और निर्भरताएँ छोड़ देता है जिनकी अन्य पैकेजों को अभी भी आवश्यकता हो सकती है। उन्हें भी हटाने के लिए:
इसके बाद, Docker की डेटा निर्देशिका हटाएँ यदि आप सभी इमेज, कंटेनर और वॉल्यूम हटाना चाहते हैं। यह चरण वैकल्पिक है, लेकिन पूर्ण सफ़ाई के लिए अनुशंसित है।
डिफ़ॉल्ट रूप से Docker सब कुछ
/var/lib/dockerमें संग्रहीत करता है। इस निर्देशिका को हटाने से आपके सभी कंटेनर, इमेज, नेटवर्क और वॉल्यूम स्थायी रूप से हट जाते हैं:आपको Docker की कॉन्फ़िगरेशन निर्देशिका भी हटानी चाहिए:
आगे बढ़ें और सिस्टम समूहों और उपयोगकर्ताओं की सफ़ाई करें जिन्हें Docker ने इंस्टॉलेशन के दौरान बनाया था। Docker आपके सिस्टम में एक
dockerसमूह जोड़ता है और उपयोगकर्ता अनुमतियों में बदलाव कर सकता है।docker समूह हटाएँ:
यदि आपने उपयोगकर्ताओं को docker समूह में जोड़ा है, तो समूह हटाने पर उनकी सदस्यता अपने-आप साफ़ हो जाएगी। लेकिन आप इसे हटाने से पहले विशिष्ट उपयोगकर्ताओं को समूह से मैन्युअल रूप से भी हटा सकते हैं:
फिर, Docker की systemd सेवा फ़ाइलें और सॉकिट फ़ाइलें हटाएँ:
अंत में, शेष चल रहे Docker प्रोसेस जाँचें जो अभी भी सक्रिय हो सकते हैं:
यदि कोई मिले, तो उन्हें मैन्युअल रूप से रोकें:
इन चरणों के बाद, Docker आपके सिस्टम से पूरी तरह हट जाना चाहिए और कोई फ़ाइल या कॉन्फ़िगरेशन शेष नहीं रहना चाहिए।
Docker के विकल्पों पर विचार कर रहे हैं? स्विच करने से पहले अन्य कंटेनरीकरण प्लेटफ़ॉर्म देखें।
निष्कर्ष और सर्वोत्तम प्रथाएँ
अब आपके Debian पर Docker चल रहा है, पर इंस्टॉलेशन तो बस शुरुआत है। आप अपना Docker वातावरण कैसे कॉन्फ़िगर और मेंटेन करते हैं, यही तय करता है कि आपका प्रोडक्शन अनुभव सुचारू रहेगा या आप रातों को कंटेनर समस्याओं का समाधान करते रहेंगे।
विभिन्न स्थापत्यों के लिए मल्टी-प्लेटफ़ॉर्म कंटेनर बना रहे हैं? Docker Buildx क्रॉस-प्लेटफ़ॉर्म बिल्ड को सरल बनाता है।
अपनी बाधाओं के आधार पर इंस्टॉलेशन विधि चुनें। अधिकांश प्रोडक्शन वातावरण के लिए आधिकारिक Docker रिपोजिटरी सर्वोत्तम है क्योंकि इससे आपको नवीनतम फ़ीचर और सुरक्षा पैच मिलते हैं। लेकिन एयर-गैप्ड नेटवर्क या वर्शन संगति आवश्यकताओं के कारण आपको इसके बजाय मैन्युअल DEB इंस्टॉलेशन की ज़रूरत पड़ सकती है।
अपने Docker वातावरण को तुरंत सुरक्षित करें। अनिवार्य ऐक्सेस कंट्रोल के लिए AppArmor या SELinux सक्षम करें, प्रतिबंधात्मक डेमॉन सेटिंग्स कॉन्फ़िगर करें, और कंटेनर संसाधनों को सीमित करने के लिए cgroups का उपयोग करें। Docker को स्वत: सुरक्षा अद्यतनों के साथ अपडेट रखें, लेकिन पहले उन्हें स्टेजिंग में टेस्ट करें।
मल्टी-कंटेनर एप्लिकेशनों के लिए Docker Compose का उपयोग करें। जटिल
docker runकमांड प्रबंधित करने के बजाय, अपनी एप्लिकेशन स्टैक को YAML में परिभाषित करें।डिस्क उपयोग की निगरानी करें और नियमित रूप से सफ़ाई करें। अप्रयुक्त इमेज हटाने के लिए
docker system pruneचलाएँ और लॉग रोटेशन सेट करें ताकि कंटेनर आपकी डिस्क न भर दें।जब आपको और विस्तृत जानकारी चाहिए, तो आधिकारिक दस्तावेज़ीकरण उन उन्नत विषयों को कवर करता है जिन्हें यह गाइड नहीं छूती। नेटवर्किंग, स्टोरेज ड्राइवर और ऑर्केस्ट्रेशन में गहराई से जानने के लिए Docker प्रलेखन देखें। Debian Docker पैकेज प्रलेखन पैकेज-विशिष्ट कॉन्फ़िगरेशन और ज्ञात समस्याएँ समझाता है।
Debian पर Docker आपको कंटेनरीकृत एप्लिकेशनों के लिए एक स्थिर, शक्तिशाली प्लेटफ़ॉर्म देता है — लेकिन तभी, जब आप इसे सोच-समझकर कॉन्फ़िगर करें और निरंतर मेंटेन रखें।
Docker, कंटेनरीकरण, और डेटा साइंस व मशीन लर्निंग में इसके उपयोग के बारे में अधिक सीखना चाहते हैं? ये DataCamp कोर्स आपके लिए अगला सर्वश्रेष्ठ पड़ाव हैं: