खोज…


पैरामीटर

पैरामीटर विवरण
--खींचें यह सुनिश्चित करता है कि बाकी डॉक़रफाइल बनाने से पहले आधार छवि ( FROM ) अद्यतित हो।

डॉकफाइल से एक छवि का निर्माण

एक बार जब आप एक Dockerfile है, तो आप इसे से एक छवि का निर्माण का उपयोग कर सकते हैं docker build । इस आदेश का मूल रूप है:

docker build -t image-name path

यदि आपके डॉकरीफाइल का नाम Dockerfile नहीं है, तो आप निर्माण करने के लिए डॉकरफाइल का नाम देने के लिए -f ध्वज का उपयोग कर सकते हैं।

docker build -t image-name -f Dockerfile2 .

उदाहरण के लिए, dockerbuild-example:1.0.0 नाम की छवि बनाने के dockerbuild-example:1.0.0 मौजूदा कार्य निर्देशिका में एक Dockerfile से dockerbuild-example:1.0.0 :

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .

अधिक विकल्पों और सेटिंग्स के लिए docker build उपयोग दस्तावेज़ देखें।

एक सामान्य गलती उपयोगकर्ता होम डायरेक्टरी ( ~ ) में डॉकरफाइल बना रही है। यह एक बुरा विचार है क्योंकि docker build -t mytag . दौरान docker build -t mytag . यह संदेश लंबे समय तक दिखाई देगा:

प्रसंग अपलोड करना

इसका कारण है डॉकटर डेमन सभी उपयोगकर्ता की फाइलों (दोनों होम डायरेक्टरी और यह सबडायरेक्टरीज) को कॉपी करने की कोशिश कर रहा है। डॉकफाइल के लिए हमेशा एक निर्देशिका निर्दिष्ट करके इससे बचें।

निर्माण निर्देशिका में .dockerignore फ़ाइल जोड़ना एक अच्छा अभ्यास है । इसका सिंटैक्स .gitignore फ़ाइलों के समान है और यह सुनिश्चित करेगा कि केवल वांछित फाइलें और निर्देशिकाएं बिल्ड के संदर्भ के रूप में अपलोड की गई हैं।

एक साधारण डॉकफाइल

FROM node:5

FROM निर्देश से शुरू करने के लिए एक छवि निर्दिष्ट करता है। किसी भी मान्य छवि संदर्भ का उपयोग किया जा सकता है।

WORKDIR /usr/src/app

WORKDIR निर्देश कंटेनर के अंदर चालू कार्यशील निर्देशिका को सेट करता है, जो कंटेनर के अंदर चलने वाली cd बराबर होता है। (नोट: RUN cd वर्तमान कार्य निर्देशिका को नहीं बदलेगा।)

RUN npm install cowsay knock-knock-jokes

RUN कंटेनर के अंदर दिए गए कमांड को निष्पादित करता है।

COPY cowsay-knockknock.js ./

COPY दूसरे संदर्भ द्वारा निर्दिष्ट कंटेनर में स्थान के संदर्भ में बिल्ड संदर्भ ( path docker build path पारित docker build path ) से पहले तर्क में निर्दिष्ट फ़ाइल या निर्देशिका की COPY बनाता है।

CMD node cowsay-knockknock.js

CMD छवि को चलाने के लिए निष्पादित करने के लिए एक कमांड निर्दिष्ट करता है और कोई कमांड नहीं दी जाती है। docker run करने के लिए एक कमांड पास करके इसे ओवरराइड किया जा सकता है।

कई अन्य निर्देश और विकल्प हैं; एक पूरी सूची के लिए डॉकरफ़ाइल संदर्भ देखें।

ENTRYPOINT और CMD के बीच अंतर

निर्मित छवियों में डिफ़ॉल्ट रूप से चलाने के लिए कौन सी कमांड निर्दिष्ट Dockerfile इसके लिए दो Dockerfile निर्देश हैं। यदि आप केवल CMD निर्दिष्ट करते हैं, तो ENTRYPOINT उस कमांड को डिफ़ॉल्ट ENTRYPOINT का उपयोग करके ENTRYPOINT , जो कि /bin/sh -c । जब आप बिल्ट इमेज शुरू करते हैं तो आप या तो एंट्रीपॉइंट और / या कमांड दोनों को ओवरराइड कर सकते हैं। यदि आप दोनों निर्दिष्ट करते हैं, तो ENTRYPOINT आपके कंटेनर प्रक्रिया के निष्पादन योग्य को निर्दिष्ट करता है, और CMD को उस निष्पादन योग्य के मापदंडों के रूप में आपूर्ति की जाएगी।

उदाहरण के लिए यदि आपकी Dockerfile में है

FROM ubuntu:16.04
CMD ["/bin/date"]

तब आप डिफ़ॉल्ट ENTRYPOINT निर्देश /bin/sh -c का उपयोग कर रहे हैं, और उस डिफ़ॉल्ट प्रविष्टि के साथ /bin/date चला रहे हैं। आपकी कंटेनर प्रक्रिया की कमान /bin/sh -c /bin/date । एक बार जब आप इस छवि को चलाते हैं तो यह वर्तमान तिथि को डिफ़ॉल्ट रूप से प्रिंट कर लेगा

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

आप कमांड लाइन पर CMD को ओवरराइड कर सकते हैं, जिस स्थिति में यह आपके द्वारा निर्दिष्ट कमांड को चलाएगा।

$ docker run test /bin/hostname
bf0274ec8820

यदि आप एक ENTRYPOINT निर्देश निर्दिष्ट करते हैं, तो Docker उस निष्पादन योग्य का उपयोग करेगा, और CMD निर्देश कमांड के डिफ़ॉल्ट पैरामीटर (एस) को निर्दिष्ट करता है। तो अगर आपके Dockerfile में शामिल हैं:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

फिर इसे चलाने से उत्पादन होगा

$ docker build -t test .
$ docker run test
Hello

आप चाहें तो विभिन्न पैरामीटर प्रदान कर सकते हैं, लेकिन वे सभी /bin/echo चलेंगे

$ docker run test Hi
Hi

यदि आप अपने डॉकरीफाइल में सूचीबद्ध प्रविष्टि बिंदु को ओवरराइड करना चाहते हैं (यानी यदि आप इस कंटेनर में echo से अलग कमांड चलाना चाहते हैं), तो आपको कमांड लाइन पर --entrypoint पैरामीटर निर्दिष्ट करने की आवश्यकता है:

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

आम तौर पर आप ENTRYPOINT निर्देश का उपयोग अपने मुख्य अनुप्रयोग को चलाने के लिए करना चाहते हैं, और डिफ़ॉल्ट मापदंडों को CMD

Dockerfile में एक पोर्ट एक्सपोज़ करना

EXPOSE <port> [<port>...]

डॉकर के दस्तावेज से:

EXPOSE निर्देश डॉकर को सूचित करता है कि कंटेनर रनटाइम पर निर्दिष्ट नेटवर्क पोर्ट पर सुनता है। EXPOSE कंटेनर के बंदरगाहों को मेजबान के लिए सुलभ नहीं बनाता है। ऐसा करने के लिए, आपको पोर्ट की एक श्रृंखला को प्रकाशित करने के लिए या -p ध्वज का उपयोग करना चाहिए या -P सभी पोर्ट को प्रकाशित करने के लिए-ध्वज का उपयोग करना चाहिए। आप एक पोर्ट नंबर को उजागर कर सकते हैं और इसे दूसरे नंबर के तहत बाहरी रूप से प्रकाशित कर सकते हैं।

उदाहरण:

अपने डॉकरफाइल के अंदर:

EXPOSE 8765

होस्ट मशीन से इस पोर्ट को एक्सेस करने के लिए, अपने docker run कमांड में इस तर्क को शामिल करें:

-p 8765:8765

ENTRYPOINT और CMD को क्रिया और पैरामीटर के रूप में देखा जाता है

मान लीजिए कि आपके पास एक डॉकरीफाइल खत्म हो रहा है

ENTRYPOINT [ "nethogs"] CMD ["wlan0"]

यदि आप इस छवि को एक के साथ बनाते हैं

docker built -t inspector .

इस तरह के एक आदेश के साथ इस तरह के एक Dockerfile के साथ बनाया छवि लॉन्च

docker run -it --net=host --rm inspector

, nethogs wlan0 नाम के इंटरफ़ेस की निगरानी करेंगे

अब यदि आप इंटरफ़ेस eth0 (या wlan1, या ra1 ...) की निगरानी करना चाहते हैं, तो आप कुछ ऐसा करेंगे

docker run -it --net=host --rm inspector eth0

या

docker run -it --net=host --rm inspector wlan1

डॉकिंग हब या किसी अन्य रजिस्ट्री के लिए एक छवि को धक्का देना और खींचना

स्थानीय रूप से बनाई गई छवियों को डॉकटर हब या रजिस्ट्री के रूप में जाना जाने वाले किसी भी अन्य डॉकटर रेपो होस्ट में धकेल दिया जा सकता है। मौजूदा डॉकटर हब खाते में साइन docker login करने के लिए docker login का उपयोग करें।

docker login

Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: cjsimon
Password:
Login Succeeded

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

docker login quay.io

फिर आप उन छवियों को टैग और पुश कर सकते हैं जिन्हें आप लॉग इन करते हैं। आपका रिपॉजिटरी server/username/reponame:tag रूप में निर्दिष्ट किया जाना चाहिए। वर्तमान में सर्वर को छोड़ना डॉकटर हब में चूक करता है। (डिफ़ॉल्ट रजिस्ट्री को किसी अन्य प्रदाता में नहीं बदला जा सकता है, और इस सुविधा को लागू करने की कोई योजना नहीं है ।)

docker tag mynginx quay.io/cjsimon/mynginx:latest

एक ही छवि के विभिन्न संस्करणों, या शाखाओं का प्रतिनिधित्व करने के लिए विभिन्न टैग का उपयोग किया जा सकता है। कई अलग-अलग टैग वाली छवि प्रत्येक टैग को एक ही रेपो में प्रदर्शित करेगी।

अपनी नई टैग की गई छवि सहित, अपने स्थानीय मशीन पर स्थापित चित्रों की एक सूची देखने के लिए docker images का उपयोग करें। फिर रजिस्ट्री पर अपलोड करने के लिए पुश का उपयोग करें और छवि को डाउनलोड करने के लिए खींचें।

docker push quay.io/cjsimon/mynginx:latest

-a विकल्प निर्दिष्ट करके किसी चित्र के सभी टैग खींचे जा सकते हैं

docker pull quay.io/cjsimon/mynginx:latest

प्रॉक्सी का उपयोग करके बिल्डिंग

अक्सर जब एक डोकर छवि निर्माण, Dockerfile निर्देश है कि रन कार्यक्रमों इंटरनेट से संसाधनों को लाने (शामिल wget उदाहरण उदाहरण के लिए GitHub पर एक कार्यक्रम द्विआधारी निर्माण खींचने के लिए के लिए)।

डॉकटर को सेट किए गए पर्यावरण चर को पारित करने का निर्देश देना संभव है ताकि इस तरह के कार्यक्रम एक प्रॉक्सी के माध्यम से उन भ्रूणों को निष्पादित करें:

$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
               --build-arg https_proxy=http://myproxy.example.com:3128 \
               --build-arg no_proxy=internal.example.com \
               -t test .

build-arg पर्यावरण चर हैं जो केवल बिल्ड समय पर उपलब्ध हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow