2014-10-28 12 views
37

मैंने अपनी मेजबान मशीन पर दो अलग-अलग निर्देशिकाएं बनाई हैं क्योंकि मैं डॉकर के बारे में जानने के लिए बस अपने डॉकरफाइल को व्यवस्थित रखने की कोशिश करता हूं। माई डॉकरफाइल मैं बस इस तरह दिखता हूं:डॉकर छवि के लिए संदर्भ का निर्माण बहुत बड़ा

FROM crystal/centos 
MAINTAINER crystal 

ADD ./rpms/test.rpm ./rpms/ 
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm 

मेरा वास्तविक आरपीएम केवल 1 जीबी है। लेकिन जब मैं sudo docker build -t="crystal/test" . करने की कोशिश करता हूं, तो मुझे डॉकर डेमन 3.5 जीबी में बिल्ड संदर्भ भेजना पड़ता है। क्या कोई और चीज है जिसे मैं अनजान हूं क्योंकि आप डॉकर छवियां बनाना जारी रखते हैं? क्या मेरी याददाश्त जमा हो रही है क्योंकि मैं अपनी मेजबान मशीन पर अपनी अन्य निर्देशिकाओं में और अधिक छवियां बना रहा हूं?

उत्तर

91

डॉकर क्लाइंट पूरे "बिल्ड संदर्भ" को डॉकर डिमन पर भेजता है। वह संदर्भ संदर्भ (डिफ़ॉल्ट रूप से) संपूर्ण निर्देशिका Dockerfile है (इसलिए, संपूर्ण rpms पेड़) है।

कुछ फ़ाइलों को अनदेखा करने के लिए डॉकर प्राप्त करने के लिए आप .dockerignore फ़ाइल सेट कर सकते हैं। आप इसके साथ प्रयोग करना चाह सकते हैं।

फिर, आप अपने Dockerfile ऊपर अपने rpms फ़ोल्डर एक निर्देशिका स्तर स्थानांतरित कर सकते हैं, और Dockerfile की निर्देशिका में केवल सिमलिंक test.rpm

+2

दुर्भाग्य से ऐसा लगता है कि symlinking के बाद से 'जोड़ें इस मामले में संभव नहीं है दिया जाता है 'आदेश निर्माण के दौरान sym लिंक का पालन नहीं करता है। देखें: https://github.com/docker/docker/issues/1676 – JimmidyJoo

+2

'.dockerignore' मेरे लिए बहुत अच्छा काम करता है! 10x – ItayB

+0

lifesaver! रेल डेवलपर्स: 'tmp'' log' को '.dockerignore' + अन्य कस्टम वाले में जोड़ना सुनिश्चित करें – equivalent8

8

मैंने इसे अपने डॉकरफाइल और डॉकर-कंपोज़.इम को एक उपफोल्डर में ले जाकर तय किया और यह बहुत अच्छा काम किया। स्पष्ट रूप से डॉकर वर्तमान फ़ोल्डर को डिमन पर भेजता है और मेरा फ़ोल्डर 9 गीगा था।

1

मेरे मामले में किया गया है कि जब मैं गलत -f तर्क के साथ निष्पादित - जहां

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile /home/DF/ Dockerfile स्थित निर्देशिका के लिए पथ के बिना - सही

docker build --no-cache -t nginx5 -f /home/DF/Dockerfile - गलत

0

मैं Freestyler रूप में एक ही मुद्दा था। हालांकि मैं अपने संदर्भ से एक निर्देशिका से निर्माण कर रहा था। तो -फ तर्क सही थे संदर्भ गलत था। डोकर-निर्देशिका से

project 
| 
-------docker-dir 

बिल्डिंग निम्नलिखित ठीक गोदी-निर्देशिका का निर्माण संदर्भ बदल से

docker build -t br_base:0.1 . 

भवन था। इसलिए मुझे कमांड में संदर्भ बदलने की जरूरत है। संदर्भ '।' द्वारा दिया गया है उपरोक्त आदेश में।

परियोजना निर्देशिका से नए आदेश दिया जाना चाहिए

docker build -t br_base:0.1 ./base 

यहां संदर्भ द्वारा './base'

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