2017-01-05 15 views
11

के साथ डॉकर छवि के आकार को कम करने के लिए कैसे मैंने कोणीय-क्ली द्वारा नया कोणीय 2 ऐप बनाया और इसे डॉकर में चलाया।नोडजेस

सबसे पहले मैं अपने स्थानीय मशीन पर एप्लिकेशन init:

ng new project && cd project && "put my Dockerfile there" && docker build -t my-ui && docker run. 

मेरे Dockerfile

FROM node 

RUN npm install -g [email protected] && npm cache clean && rm -rf ~/.npm 

RUN mkdir -p /opt/client-ui/src 
WORKDIR /opt/client-ui 

COPY package.json /opt/client-ui/ 
COPY angular-cli.json /opt/client-ui/ 
COPY tslint.json /opt/client-ui/ 

ADD src/ /opt/client-ui/src 

RUN npm install 
RUN ng build --prod --aot 

EXPOSE 4200 

ENV PATH="$PATH:/usr/local/bin/"  
CMD ["npm", "start"] 

सब कुछ ठीक है, समस्या छवि का आकार है: 939MB !!! मैंने FROM का उपयोग करने की कोशिश की: ubuntu: 16.04 और उस पर नोडजेज़ स्थापित करें (यह काम करता है), लेकिन फिर भी मेरी छवि ~ 450 एमबी है। मुझे पता है कि नोड: अल्पाइन मौजूद है, लेकिन मैं इसमें कोणीय-क्ली स्थापित करने में सक्षम नहीं हूं।

मैं छवि आकार को कैसे छोटा कर सकता हूं? क्या डॉकरफ़ाइल में "एनपीएम इंस्टॉल" और "एनजी बिल्ड" चलाने के लिए आवश्यक है? मैं स्थानीयहोस्ट पर ऐप बनाने की उम्मीद करता हूं और इसे छवि पर कॉपी करता हूं। मैंने dist dir और package.json आदि फ़ाइलों की प्रतिलिपि बनाने की कोशिश की, लेकिन यह काम नहीं करता है (ऐप शुरू होने में असफल)। धन्यवाद।

+1

अंतरिक्ष उपयोग कहां से आता है? 'du -h' – Sebas

+1

छवि का उपयोग करने के लिए छवि के सभी परतों को दिखाने के लिए' डॉकर इतिहास 'का उपयोग करें। – nwinkler

उत्तर

0

उत्पादन के लिए, आपको नोड.जेएस, एनपीएम निर्भरताओं आदि के साथ एक छवि वितरित करने की आवश्यकता नहीं है। आपको केवल एक छवि की आवश्यकता है जिसका उपयोग डेटा वॉल्यूम कंटेनर शुरू करने के लिए किया जा सकता है जो संकलित स्रोत प्रदान करता है, स्रोत स्रोत जारी करता है और अन्य संपत्तियां, एनपीएम के माध्यम से पैकेज के साथ पुनर्वितरण के मुकाबले प्रभावी ढंग से नहीं, कि आप अपने वेबसर्वर से संलग्न कर सकते हैं।

तो, अपने सीआई मेजबान के लिए, आप node:alpine वितरण में से एक चुनें और सूत्रों कॉपी और उसमें निर्भरता स्थापित कर सकते हैं, तो आप छवि कंटेनरों कि परीक्षण बनाता है जब तक आप अंत में एक कंटेनर चलाने चलाने के लिए फिर से उपयोग कर सकते हैं जो एक उत्पादन संकलन करता है, जिसे आप नाम दे सकते हैं।

docker run --name=compile-${RELEASE} ci-${RELEASE} npm run production 

के बाद आप एक कंटेनर के भीतर सूत्रों संकलन समाप्त कर दिया है, एक कंटेनर संकलन संलग्न कंटेनर से संस्करणों है कि चलाने के लिए और कंटेनर पर एक मात्रा के स्रोतों को कॉपी करके अपने डोकर करने के लिए धक्का है कि नदी के ऊपर:

docker run --name=release-${RELEASE} --volumes-from=compile-${RELEASE} -v /srv/public busybox cp -R /myapp/dist /srv/public 
docker commit release-${RELEASE} release-${RELEASE} myapp:${RELEASE} 
1

You can certainly use my alpine-ng image if you like.

You can also check out the dockerfile, if you want to try and modify it in some way.

मैं आपको सूचित करना है अल्पाइन पर है कि भले आधारित अफसोस यह, अभी भी 610 एमबी है। सुनिश्चित करने के लिए एक सुधार, लेकिन इस तथ्य के आसपास कोई नहीं हो रहा है कि कोणीय कंपाइलर काफी बड़ा है।

0

FROM mhart/alpine-node:base-6 आज़माएं शायद यह काम करेगा।