2017-01-09 10 views
5

छोड़ते समय एक निर्देशिका को एक डॉकर छवि में कॉपी करना मुझे एक डॉकर फ़ाइल बनाना है जो MyApp निर्देशिका को छवि में कॉपी करता है।दी गई उप निर्देशिका

MyApp 
    -libs 
    -classes 
    -resources 

Libs निर्देशिका लगभग 50 एमबी है और यह बार-बार बदलती नहीं है जहां कक्षा के रूप में निर्देशिका के आसपास 1 एमबी है और यह लगातार परिवर्तन के अधीन है। डॉकर बिल्ड को अनुकूलित करने के लिए, मैंने डॉकरफ़ाइल की शुरुआत में लिब्स निर्देशिका जोड़ने और डॉकरफ़ाइल के अंत में अन्य निर्देशिकाएं जोड़ने की योजना बनाई। मेरे वर्तमान दृष्टिकोण इस

ADD MyApp/libs /opt/MyApp/libs 
## do other operations 
ADD MyApp/classes /opt/MyApp/resources 
ADD MyApp/classes /opt/MyApp/classes 

इस रूप में भविष्य में मैं MyApp निर्देशिका में कुछ अन्य निर्देशिकाओं डोकर छवि में नकल किया जा सकता है एक पोषणीय प्रारूप में नहीं है की तरह है। मेरे लक्ष्य इस

ADD MyApp/libs /opt/MyApp/libs 
## do other operations 
ADD MyApp -exclude MyApp/libs /opt/MyApp 

की तरह एक डोकर फ़ाइल लिखना है वहां भी इसी तरह आदेश एक निर्देशिका में कुछ फ़ाइलें जो डोकर छवि में बनाई जाए बाहर करने के लिए है?

+0

.dockerignore फ़ाइल पर एक नज़र डालें, दस्तावेज़ https://docs.docker.com/engine/reference/builder/ – user2915097

+0

इस मामले में '.dockerignore' फ़ाइल कैसे मदद करेगा? वह एक ही आधार निर्देशिका को स्क्रिप्ट में दो बिंदुओं पर कॉपी करना चाहता है, एक बार केवल 'lib' निर्देशिका, दूसरी बार' lib' निर्देशिका के बिना। – nwinkler

उत्तर

2

मैंने @nwinkler द्वारा समझाया गया तरीका माना और निर्माण को सुसंगत बनाने के लिए कुछ कदम जोड़े।

अब मेरी संदर्भ निर्देशिका संरचना के रूप में

-Dockerfile 
-MyApp 
    -libs 
    -classes 
    -resources 
-.dockerignore 
-libs 

इस प्रकार मैं MyApp निर्देशिका के बाहरी को libs निर्देशिका की नकल की है। जो निम्न पंक्ति

MyApp/libs/* 

Dockerfile इस

ADD libs /opt/MyApp/libs 
## do other operations 
ADD MyApp /opt/MyApp 

क्योंकि dockerignore फ़ाइल MyApp/lib निर्देशिका पर ध्यान नहीं देता के रूप में अद्यतन शामिल एक .dockerignore फ़ाइल जोड़ा गया, वहाँ से अधिक मौजूद लेखन libs निर्देशिका मैं नकल की है कोई खतरा नहीं है पहले।

+0

यह अच्छा लग रहा है! – nwinkler

1

डॉकर के वर्तमान संस्करण के साथ बॉक्स में यह संभव नहीं है। .dockerignore फ़ाइल का उपयोग भी काम नहीं करेगा, क्योंकि यह हमेशा libs फ़ोल्डर को बाहर कर देगा।

आप क्या कर सकते अपने docker build एक खोल में स्क्रिप्ट लपेटकर और docker build कॉल करने से पहले अस्थायी निर्देशिका में MyApp फ़ोल्डर (ऋण libs फ़ोल्डर), और libs फ़ोल्डर की प्रतिलिपि है।

कुछ इस तरह:

#!/usr/bin/env bash 
rm -rf temp 
mkdir -p temp 

# Copy the whole folder 
cp -r MyApp temp 

# Move the libs folder up one level 
mv temp/MyApp/libs temp 

# Now build the Docker image 
docker build ... 

तो फिर आप अपने Dockerfile बदलने temp निर्देशिका से कॉपी करने के लिए कर सकते हैं:

ADD temp/libs /opt/MyApp/libs 
## do other operations 
ADD temp/MyApp /opt/MyApp 

एक खतरा नहीं है कि दूसरी ADD आदेश से /opt/MyApp/libs फ़ोल्डर निकाल देंगे छवि। यदि ऐसा होता है, तो आपको ADD कमांड को उलटना पड़ सकता है और बाकी सब कुछ के बाद libs फ़ोल्डर जोड़ना पड़ सकता है।

+0

मैं डॉकर फ़ाइल की शुरुआत में libs निर्देशिका जोड़ना चाहता हूं क्योंकि मुझे MyApp के अपडेट की आवश्यकता होने पर न्यूनतम आकार के परिवर्तन उत्पन्न करने के लिए डॉकरफ़ाइल को अनुकूलित करने की आवश्यकता है। मैंने एक ही चीज़ को थोड़ा अलग दृष्टिकोण से हासिल किया। मैं इसे एक उत्तर के रूप में जोड़ सकता हूं। – Dimuthu

संबंधित मुद्दे