पहली गलती यह सोचना है कि एक डॉकर छवि/कंटेनर वर्चुअल मशीन के समान है । समानताएं हैं लेकिन वे समान नहीं हैं और स्पष्ट रूप से, वास्तव में समान नहीं हैं ।
डॉकर वास्तव में ओएस चलाने के लिए नहीं है । यह एक निहित (पृथक) वातावरण में एकल प्रक्रिया को चलाने के लिए है । कंटेनर उसी कर्नेल का उपयोग करता है जो होस्ट पर है ।
जब आप एक डॉकर छवि बनाते हैं FROM ubuntu
आप अपनी छवि को कुछ पूर्व-निर्मित परतों के साथ शुरू कर रहे हैं जो एक मानक फ़ाइल सिस्टम के कुछ हिस्सों में लाता है और पैकेज जो आपको उबंटू सर्वर पर मिलेंगे ।
फिर आप अपनी खुद की अतिरिक्त परतें जोड़ते हैं, बायनेरिज़ और फ़ाइलों को जोड़ते हैं जो आपके प्रोग्राम / प्रक्रिया को चलाने के लिए आवश्यक हैं ।
छवि (सामान्य रूप से लेकिन अनिवार्य नहीं) में एक होगा CMD
आदेश या ENTRYPOINT
कुछ चलाने की आज्ञा।
एक में प्रत्येक पंक्ति Dockerfile
छवि बनाने के तरीके पर डॉकर को निर्देश देने वाला एक आदेश है । प्रत्येक पंक्ति / कमांड का परिणाम एक और परत में होता है । पैकेज स्थापित करने के लिए, आप शायद ऐसा कुछ करना चाहते हैं:
FROM ubuntu:16.04RUN apt-get -qq update && \ apt-get -y install build-essential autoconf libtool && \ apt-get install -y python-setuptools python-dev python3-dev && \ apt-get install -y python-pip python3-pip && \ apt-get install -y python-virtualenv unixodbc-dev libffi-dev git && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*
इससे आपकी छवि छोटी रहेगी।
फिर आपको वास्तव में कुछ चलाने की आवश्यकता होगी । ..
CMD python
तब आप अपनी छवि बना सकते हैं:
docker build -t myimage .
और इसका इस्तेमाल करें । ..
docker run --rm -it myimage
ifconfig
काम नहीं करता क्योंकि बाइनरी छवि में नहीं है । यह वास्तव में आवश्यक नहीं है क्योंकि आप कंटेनर के भीतर से नेटवर्क का प्रबंधन नहीं करते हैं ।
तो आप कुछ कोड बनाने के लिए एक कंटेनर बना रहे हैं । जब आप इसे चलाते हैं तो आप कंटेनर के अंदर कोड के साथ अपनी निर्देशिका को माउंट करना चाहते हैं । मुझे नहीं पता कि आप अपने वर्कस्टेशन या सर्वर पर कौन सा ओएस चलाते हैं, इसलिए मैं अधिक जानकारी के लिए इस पोस्ट का उल्लेख करूंगा: https://stackoverflow.com/questions/41485217/mount-current-directory-as-a-volume-in-docker-on-windows-10/41489151#41489151
मान लीजिए कि आप कमांड के साथ निर्माण कर रहे हैं make
, आप यह कर सकते हैं:
docker run --rm -it -v $(pwd):/usr/src/project myimage make
इसके लिए आपके में एक लाइन की आवश्यकता होगी Dockerfile
काम कर रहे डीआईआर बनाने के लिए /usr/src/project
:
WORKDIR /usr/src/project
यदि आप भाग गए तो क्या होगा docker
ऊपर कमांड लाइन यह है कि यह नामित छवि से एक कंटेनर बनाएगा myimage
(बिल्ड कमांड पहले दिखाया गया है), वर्तमान निर्देशिका को माउंट करें जिसमें आप हैं /usr/src/project
नए कंटेनर के अंदर। भागो make
कंटेनर के अंदर कमांड करें और फिर बाहर निकलें । द --rm
पैरामीटर डॉकर को बताता है कि एक बार चलने के बाद कंटेनर को चारों ओर न रखें । द -it
पैरामीटर का मतलब है interactive
और tty
.
यदि आप बस कुछ शेल तक पहुंच चाहते हैं ताकि आप मैन्युअल रूप से चला सकें make
या तदर्थ फैशन में अन्य आदेश, आप यह भी कर सकते हैं:
docker run --rm -it -v $(pwd):/usr/src/project myimage /bin/bash
यह कंटेनर से बनाएगा myimage
छवि, और भागो bash
. क्योंकि bash
बाहर नहीं निकलता है और आपके पास है -it
पैरामीटर, आप कंटेनर के प्रॉम्प्ट पर होंगे जहां आप जो चाहें कर सकते हैं ।
बस याद रखें कि कंटेनर के अंदर से आपके द्वारा संशोधित की गई कोई भी फ़ाइल संरक्षित नहीं होगी और अगली बार जब आप डिफ़ॉल्ट स्थिति में वापस शुरू करेंगे । बेशक से किसी भी फाइल /usr/src/project
निर्देशिका को आपके स्थानीय हार्ड ड्राइव पर संशोधित किया जाएगा क्योंकि यह इससे घुड़सवार है ।