Dockerfile बनाते समय, दो कमांड्स होते हैं जिनका उपयोग आप फ़ाइलों / निर्देशिकाओं को कॉपी करने के लिए कर सकते हैं - ADD
और COPY
। यद्यपि उनके कार्य के दायरे में मामूली अंतर हैं, वे अनिवार्य रूप से एक ही कार्य करते हैं।
तो, हमारे पास दो कमांड क्यों हैं, और हम कैसे जानते हैं कि एक या दूसरे का उपयोग कब करना है?
डॉकटर ADD
कमांड
आइए यह देखते हुए शुरू करें कि ADD
कमांड से पुराना है COPY
। डॉकर प्लेटफॉर्म के लॉन्च के बाद से, ADD
निर्देश इसके कमांड की सूची का हिस्सा रहा है।
कमांड निर्दिष्ट कंटेनर के फाइल सिस्टम में फाइलों / निर्देशिकाओं को कॉपी करता है।
ADD
कमांड के लिए मूल सिंटैक्स है:
ADD <src> … <dest>
इसमें वह स्रोत शामिल है जिसे आप कॉपी करना चाहते हैं ( <src>
) गंतव्य के बाद आप इसे स्टोर करना चाहते हैं ( <dest>
)। यदि स्रोत एक निर्देशिका है, तो ADD
इसके अंदर सब कुछ कॉपी करता है (फाइल सिस्टम मेटाडेटा सहित)।
उदाहरण के लिए, यदि फ़ाइल स्थानीय रूप से उपलब्ध है और आप इसे किसी छवि की निर्देशिका में जोड़ना चाहते हैं, तो आप टाइप करें:
ADD /source/file/path /destination/path
ADD
URL से फ़ाइलों की प्रतिलिपि भी बना सकते हैं। यह एक बाहरी फ़ाइल डाउनलोड कर सकता है और इसे वांछित गंतव्य पर कॉपी कर सकता है। उदाहरण के लिए:
ADD http://source.file/url /destination/path
एक अतिरिक्त विशेषता यह है कि यह संपीड़ित फ़ाइलों की प्रतिलिपि बनाता है, स्वचालित रूप से दिए गए गंतव्य में सामग्री निकाल रहा है। यह सुविधा केवल स्थानीय रूप से संग्रहीत संपीड़ित फ़ाइलों / निर्देशिकाओं पर लागू होती है।
ADD source.file.tar.gz /temp
ध्यान रखें कि आप URL से एक संपीड़ित फ़ाइल / निर्देशिका को डाउनलोड और निकाल नहीं सकते हैं। स्थानीय फ़ाइल सिस्टम में कॉपी करते समय कमांड बाहरी पैकेजों को अनपैक नहीं करता है।
डॉकटर COPY
कमांड
कुछ कार्यक्षमता के मुद्दों के कारण, डॉकटर को सामग्री की नकल के लिए एक अतिरिक्त आदेश पेश करना पड़ा - COPY
।
इसके निकट से संबंधित ADD
कमांड के विपरीत , COPY
केवल एक ही नियत कार्य है। इसकी भूमिका अपने मौजूदा प्रारूप में निर्दिष्ट स्थान पर फ़ाइलों / निर्देशिकाओं की नकल करना है। इसका मतलब है कि यह एक संपीड़ित फ़ाइल निकालने के साथ सौदा नहीं करता है, बल्कि इसे इस रूप में कॉपी करता है।
निर्देश का उपयोग केवल स्थानीय रूप से संग्रहीत फ़ाइलों के लिए किया जा सकता है। इसलिए, आप अपने कंटेनर में बाहरी फ़ाइलों को कॉपी करने के लिए URL के साथ इसका उपयोग नहीं कर सकते हैं।
COPY
निर्देश का उपयोग करने के लिए , मूल कमांड प्रारूप का पालन करें:
स्रोत में टाइप करें और जहाँ आप सामग्री को निकालने के लिए कमांड चाहते हैं:
COPY <src> … <dest>
उदाहरण के लिए:
COPY /source/file/path /destination/path
कौन सी कमांड का उपयोग करना है? (सर्वश्रेष्ठ अभ्यास)
जिन परिस्थितियों में COPY
कमांड को पेश किया गया था, उन्हें देखते हुए , यह स्पष्ट है कि रखना ADD
एक आवश्यकता का विषय था। डॉकर ने एक आधिकारिक दस्तावेज जारी किया जिसमें डॉकफाइल्स लिखने के लिए सर्वोत्तम प्रथाओं का उल्लेख किया गया है, जो स्पष्ट रूप से ADD
कमांड का उपयोग करने के खिलाफ सलाह देता है ।
डॉकर के आधिकारिक दस्तावेज़ीकरण नोट्स जो COPY
हमेशा गो-टू इंस्ट्रक्शन होने चाहिए क्योंकि यह अधिक पारदर्शी है ADD
।
यदि आपको एक कंटेनर में स्थानीय बिल्ड संदर्भ से कॉपी करने की आवश्यकता है, तो उपयोग करने के लिए छड़ी COPY
।
डॉकर टीम ADD
एक यूआरएल से पैकेज को डाउनलोड करने और कॉपी करने के लिए दृढ़ता से हतोत्साहित करती है । इसके बजाय, यह सुरक्षित और RUN
कमांड के भीतर wget या कर्ल का उपयोग करने के लिए अधिक कुशल है । ऐसा करने से, आप एक अतिरिक्त छवि परत बनाने और स्थान बचाने से बचते हैं।