Dockerfile बनाते समय, दो कमांड्स होते हैं जिनका उपयोग आप फ़ाइलों / निर्देशिकाओं को कॉपी करने के लिए कर सकते हैं - ADDऔर COPY। यद्यपि उनके कार्य के दायरे में मामूली अंतर हैं, वे अनिवार्य रूप से एक ही कार्य करते हैं।
तो, हमारे पास दो कमांड क्यों हैं, और हम कैसे जानते हैं कि एक या दूसरे का उपयोग कब करना है?
डॉकटर ADDकमांड
आइए यह देखते हुए शुरू करें कि ADDकमांड से पुराना है COPY। डॉकर प्लेटफॉर्म के लॉन्च के बाद से, ADDनिर्देश इसके कमांड की सूची का हिस्सा रहा है।
कमांड निर्दिष्ट कंटेनर के फाइल सिस्टम में फाइलों / निर्देशिकाओं को कॉपी करता है।
ADDकमांड के लिए मूल सिंटैक्स है:
ADD <src> … <dest>
इसमें वह स्रोत शामिल है जिसे आप कॉपी करना चाहते हैं ( <src>) गंतव्य के बाद आप इसे स्टोर करना चाहते हैं ( <dest>)। यदि स्रोत एक निर्देशिका है, तो ADDइसके अंदर सब कुछ कॉपी करता है (फाइल सिस्टम मेटाडेटा सहित)।
उदाहरण के लिए, यदि फ़ाइल स्थानीय रूप से उपलब्ध है और आप इसे किसी छवि की निर्देशिका में जोड़ना चाहते हैं, तो आप टाइप करें:
ADD /source/file/path /destination/path
ADDURL से फ़ाइलों की प्रतिलिपि भी बना सकते हैं। यह एक बाहरी फ़ाइल डाउनलोड कर सकता है और इसे वांछित गंतव्य पर कॉपी कर सकता है। उदाहरण के लिए:
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 या कर्ल का उपयोग करने के लिए अधिक कुशल है । ऐसा करने से, आप एक अतिरिक्त छवि परत बनाने और स्थान बचाने से बचते हैं।