Dockerfile का उपयोग करके एक परत में कई फ़ाइलों की प्रतिलिपि कैसे बनाएं?


246

निम्नलिखित Dockerfileमें चार COPYपरतें हैं:

COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./

इसके बजाय एक परत का उपयोग करके इन फ़ाइलों को कॉपी कैसे करें? निम्नलिखित की कोशिश की गई थी:

COPY [
    "__BUILD_NUMBER ./",
    "README.md ./",
    "gulpfile ./",
    "another_file ./",
]

जवाबों:


427
COPY README.md package.json gulpfile.js __BUILD_NUMBER ./

या

COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]

आप sourcefile विनिर्देशन में वाइल्डकार्ड वर्णों का भी उपयोग कर सकते हैं। थोड़ा और विस्तार के लिए डॉक्स देखें

निर्देशिकाएँ खास हैं! अगर आप लिखेंगे

COPY dir1 dir2 ./

यह वास्तव में जैसे काम करता है

COPY dir1/* dir2/* ./

यदि आप एकल निर्देशिका में गंतव्य निर्देशिका के तहत कई निर्देशिका (उनकी सामग्री नहीं) कॉपी करना चाहते हैं, तो आपको बिल्ड संदर्भ सेट करने की आवश्यकता होगी ताकि आपके स्रोत निर्देशिका एक आम माता-पिता और फिर COPYउस माता- पिता के अधीन हों ।


53
ध्यान दें कि यदि स्रोत निर्देशिका हैं, तो यह निर्देशिका सामग्री की प्रतिलिपि बनाता है , न कि निर्देशिका की।
Claudiu

7
ध्यान दें कि गंतव्य निर्देशिका समान है। यदि आप अलग-अलग गंतव्यों के साथ अलग-अलग फ़ाइलों का एक बहुत कुछ करते हैं, तो आप एक ओवरले फाइल सिस्टम (एक चेरोट की तरह) के निर्माण पर विचार करना चाह सकते हैं, फिर उसे एक tarसंग्रह में बदल सकते हैं , और इसे ADD के साथ जोड़ सकते हैं।
tu-Reinstate मोनिका-डोर डुह

4
@Claudiu स्वयं फ़ोल्डर की प्रतिलिपि कैसे बनाएं?
k0pernikus

5
@ k0pernikus आप कह सकते हैं COPY myDir1 ./MyDir1/
मैनुअल मैनहर्ट

@ मैनुअल-मैनहार्ट क्या कोई है जो जानता है कि क्या हम बिल्ड पैरामीटर का उपयोग करके फ़ाइलों की सूची को पैरामीटर कर सकते हैं? github.com/moby/moby/issues/38532 ?
मार्सेलो डे सेल्स

52
COPY <all> <the> <things> <last-arg-is-destination>

लेकिन यहाँ डॉक्स से एक महत्वपूर्ण अंश है:

यदि आपके पास एक से अधिक Dockerfile चरण हैं जो आपके संदर्भ से अलग-अलग फ़ाइलों का उपयोग करते हैं, तो उन्हें व्यक्तिगत रूप से कॉपी करें, बजाय एक बार में। यह सुनिश्चित करता है कि प्रत्येक चरण का निर्माण कैश केवल अमान्य है (यदि चरण को फिर से चलाने के लिए मजबूर किया जाता है) यदि विशेष रूप से आवश्यक फाइलें बदल जाती हैं।

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy


क्या आप जानते हैं कि क्या हम "सभी चीजों" को माप सकते हैं ??? बिल्ड मापदंडों का उपयोग करना? github.com/moby/moby/issues/38532 ???
मार्सेलो डे सेल्स

@MarcellodeSales को यकीन नहीं है कि आपको इसकी आवश्यकता क्यों होगी। आप इन फ़ाइलों के बिना आधार छवि क्यों नहीं बनाते हैं और फिर बच्चे की छवियों में कॉपी निर्देश है - अगर उन्हें रास्ते को परिभाषित करने की आवश्यकता है तो इससे बहुत फर्क नहीं पड़ता है। या आप इसे पूरी तरह से छवि (ओं) को पूरी तरह से छोड़ सकते हैं और इसे कंटेनर में माउंट कर सकते हैं - वहां आपके पास .env फाइलें इस विन्यास के लिए है।
मैनुएल मैनहार्ट

इसके अलावा, आप हमेशा किसी भी मौजूदा पथ पर कॉपी कर सकते हैं, क्योंकि फ़ाइल सिस्टम स्तरित है, यह पूर्व मौजूदा सामग्री को ओवरलैप / छाया करेगा।
मैनुअल मैनहर्ट

@ManuelManhart, मैं ONBUILD COPY के साथ एक डायनामिक Parameterized इमेज बना रहा हूं ... एक प्लेटफ़ॉर्म के हिस्से के रूप में, मैं इस बात की जटिलता छिपा रहा हूं कि इमेज में क्या करने की जरूरत है, इसलिए, मुझे प्रदान किए जाने वाले मानों की आवश्यकता है एक पैरामीटर के रूप में।
मार्सेलो डे सेल्स

@ मार्सेलोड्सलेस मुझे नहीं लगता कि यह अभी / अभी समर्थित है। लेकिन आप इसका इस्तेमाल करने के लिए तर्कों का निर्माण कर सकते हैं, इसे देखें stackoverflow.com/questions/43654656/…
Manuel Manhart

7

सरल

COPY README.md  package.json gulpfile.js __BUILD_NUMBER ./

से दस्तावेज़

यदि कई संसाधन निर्दिष्ट किए जाते हैं, या तो सीधे या वाइल्डकार्ड के उपयोग के कारण, तो एक निर्देशिका होनी चाहिए, और इसे एक स्लैम / के साथ समाप्त होना चाहिए।


6

यह ध्यान देने योग्य हो सकता है कि आप एक .dockerignoreफ़ाइल भी बना सकते हैं , उन फ़ाइलों को बाहर करने के लिए जिन्हें आप कॉपी नहीं करना चाहते हैं:

https://docs.docker.com/engine/reference/builder/#dockerignore-file

Docker CLI करने से पहले docker डेमन को संदर्भ भेजता है, यह संदर्भ के रूट डायरेक्टरी में .dockerignore नामक फ़ाइल की तलाश करता है। यदि यह फ़ाइल मौजूद है, तो CLI उन फ़ाइलों और निर्देशिकाओं को बाहर करने के लिए संदर्भ को संशोधित करता है जो इसमें पैटर्न से मेल खाते हैं। यह अनावश्यक रूप से बड़ी या संवेदनशील फ़ाइलों और निर्देशिकाओं को डेमन तक भेजने से बचने में मदद करता है और संभवतः उन्हें ADD या COPY का उपयोग करके छवियों में जोड़ देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.