2015-01-12 8 views
13

लगातार डिलिवरी पाइपलाइन में डॉकर का उपयोग करने का सबसे अच्छा तरीका क्या है?निरंतर वितरण में डॉकर का सबसे अच्छा उपयोग कैसे करें?

क्या निर्माण आर्टेफैक्ट एक जार/युद्ध की बजाय डॉकर छवि होना चाहिए? यदि हां, तो यह कैसे काम करेगा - मैं काम करने के लिए संघर्ष कर रहा हूं कि विकास में डॉकर का उपयोग कैसे करें (लैपटॉप पर) और उसके बाद सीआई सर्वर आर्टेफैक्ट बनाने के लिए समान आधार छवि का उपयोग करता है।

+2

कोडशिप इस प्रश्न के संबंध में एक अच्छा लेख लिखता है: https://blog.codeship.com/continuous-integration-and-delivery-with-docker/ –

उत्तर

11

वैसे, निश्चित रूप से कई सर्वोत्तम प्रथाएं हैं और यह कैसे करें इस पर कई दृष्टिकोण हैं।

  • अलग परिनियोजन योग्य कोड अलग VCS-रेपोस (हम अपनी नवीनतम परियोजना में दो अलग-अलग Git-रेपोस प्रयुक्त) में डोकर कंटेनरों से (जार/युद्ध आदि): एक दृष्टिकोण है कि मैं सफल पाया है निम्नलिखित है। इसका मतलब है कि आपके कोड को तैनात करने के लिए उपयोग की जाने वाली डॉकर छवियां एक अलग चरण में बनाई गई हैं। एक डॉकर-बिल्ड ऐसा कहने के लिए। यहां आप उदा। अपने डेटाबेस, एप्लिकेशन सर्वर, रेडिस कैश या इसी तरह के लिए डॉकर छवियां बनाएं। जब आपके वीसीएस में 'डॉकरफाइल' या समान बदल जाता है तो जेनकींस या जो भी आप उपयोग करते हैं, वह डॉकर छवियों के निर्माण को ट्रिगर कर सकता है। इन छवियों को टैग किया जाना चाहिए और कुछ रजिस्ट्री में धक्का दिया जाना चाहिए (यह Docker Hub या कुछ स्थानीय रजिस्ट्री हो सकता है)।
  • तैनाती कोड (जार/युद्ध आदि) सामान्य रूप से जेनकींस और प्रतिबद्ध-हुक का उपयोग करके बनाया जाना चाहिए। मेरी परियोजनाओं में से एक में हमने वास्तव में जेनकिंस को डॉकर कंटेनर में described here के रूप में चलाया।
  • सभी डॉकर कंटेनर जो डायनामिक डेटा का उपयोग करते हैं (जैसे डेटाबेस के लिए स्टोरेज, टोमकैट/जेटी या कॉन्फ़िगरेशन फाइलों के लिए वॉर-फाइल्स जो कोड बेस का हिस्सा हैं) को इन फ़ाइलों को data volumes or as data volume containers के रूप में माउंट करना चाहिए।
  • परीक्षण सर्वर या जो भी कदम आपके पाइपलाइन का हिस्सा हैं, उन्हें आपके निर्माण सर्वर द्वारा ज्ञात एक स्पेक के अनुसार सेट किया जाना चाहिए। हमने एक वर्णक का उपयोग किया जो आपके नए निर्मित टैग को कोड बेस से डॉकर कंटेनरों पर टैग से जोड़ता था। जेनकींस पाइपलाइन प्लगइन तब एक स्क्रिप्ट चला सकता था जिसने पहली बार होस्ट आर्टिफैक्ट्स को मेजबान सर्वर पर ले जाया था, स्थानीय रजिस्ट्री से सही डॉकर छवियों को खींच लिया था और फिर डेटा वॉल्यूम कंटेनर का उपयोग करके सभी प्रक्रियाओं को शुरू किया था (हमने Fig का उपयोग डॉकर लाइफसाइकिल के प्रबंधन के लिए किया था।

इस दृष्टिकोण के साथ, हम डॉकर कंटेनर के रूप में हमारी स्थानीय प्रक्रियाओं (डेटाबेस इत्यादि) को चलाने में भी सक्षम थे। ये कंटेनर बिल्कुल उसी छवियों के आधार पर थे जो उत्पादन में थे और देव मशीनों पर भी विकसित किए जा सकते थे। स्थानीय देव पर्यावरण और उत्पादन पर्यावरण के बीच केवल वास्तविक अंतर ऑपरेटिंग सिस्टम था। देव मशीन आमतौर पर मैक ओएस एक्स/बूट 2 डॉकर चलाती थीं और प्रोड लिनक्स पर दौड़ती थीं।

+1

[Fig] (http://www.fig.sh) बहिष्कृत है और अब और इस्तेमाल नहीं किया जाना चाहिए। इसे [डॉकर-कंपोज़] द्वारा बदला जाता है (https://www.docker.com/docker-compose)। – h3nrik

2

हां, आपको जार/युद्ध फ़ाइलों से छवियों में अपनी कलाकृतियों के निर्माण के रूप में स्थानांतरित करना चाहिए। प्रक्रिया @ वासग्रेन का वर्णन अच्छी तरह से काम करना चाहिए, हालांकि मुझे अपने उपयोग के मामले को विशेष रूप से विकास के लिए फिट करने के लिए निम्न मिला:

1- मूल छवि बनाएं। ऐसा लगता है कि आप एक जावा शॉप हैं, उदाहरण के तौर पर, उदाहरण दें कि आपकी बेस छवि FROM ubuntu:14.04 है और जेडीके और कुछ अधिक सामान्य libs इंस्टॉल करता है। आइए इसे myjava पर कॉल करें।

2- विकास के दौरान, अपने कंटेनर को स्थानीय रूप से लाने के लिए अंजीर का उपयोग करें और अपने देव कोड को सही स्थान पर माउंट करें। चित्र myjava आधार छवि का उपयोग करता है और डॉकरफ़ाइल की परवाह नहीं करता है।

3- जब आप तैनाती के लिए प्रोजेक्ट बनाते हैं तो यह डॉकरफ़ाइल का उपयोग करता है, और कहीं भी यह सही जगह पर कोड/निर्माण कलाकृतियों के COPY करता है। तब उस छवि को उचित रूप से टैग किया जाता है और तैनात किया जाता है।

2

अनुसरण करने के लिए सरल कदम।

1) एक कंटेनर

2) एक ही कंटेनर में ढांचे उपकरण स्थापित करें में जेनकींस स्थापित करें। (मैं एसबीटी प्रयुक्त)।

3) जेनकिब से डेटा को एकीकृत करने के लिए जरूरी प्लगइन के साथ जेनकिंस में एक प्रोजेक्ट बनाएं और सभी जार को संकुचित प्रारूप में बनाएं (build.tgz कहें)।

4) यह build.tgz कहीं भी स्थानांतरित किया जा सकता है और ट्रिगर किया जा सकता है लेकिन इसे अपनी सभी पर्यावरण निर्भरताओं को पूरा करना चाहिए (उदाहरण के लिए इसे माइस्क्ल की आवश्यकता है)।

5) अब हम आधार पर्यावरण छवि बनाते हैं (हमारे मामले में mysql इंस्टॉल)।

6) प्रत्येक निर्माण ट्रिगर के साथ, हमें सर्वर पर एक डॉकरफ़ाइल ट्रिगर करना चाहिए जो build.tgz और पर्यावरण छवि को जोड़ देगा।

7) अब हमारे पास हमारे पर्यावरण संतुष्ट होने के साथ हमारा build.tgz है। इस छवि को रजिस्ट्री में धक्का दिया जाना चाहिए। यह हमारी अंतिम छवि है। यह पोर्टेबल है और इसे कहीं भी तैनात किया जा सकता है।

8) यह अंतिम छवि आउटपुट प्राप्त करने के लिए आवश्यक mountppoints के साथ एक कंटेनर पर रखा जा सकता है और एक स्क्रिप्ट (script.sh) dockerfile में entrypoint आदेश उल्लेख करते हुए शुरू किया जा सकता।

9) यह script.sh छवि (मूल छवि) के अंदर होगा और हमारे उद्देश्य के अनुसार चीजों को करने के लिए कॉन्फ़िगर किया जाएगा।

10) इस कंटेनर को बनाने से पहले आपको पहले चल रहे कंटेनर को रोकने की आवश्यकता है।

महत्वपूर्ण नोट:

एक छवि हर आप का निर्माण बनाई गई है और रजिस्ट्री में संग्रहित है। इस प्रकार इसका पुन: उपयोग किया जा सकता है। इस छवि को मुख्य उत्पादन सर्वर में धकेल दिया जा सकता है और इसे ट्रिगर किया जा सकता है। यह हर बार स्वच्छ वातावरण को बनाए रखने में मदद करता है क्योंकि हम मूल छवि का उपयोग कर रहे हैं।

0

आप बांस और डॉकर के साथ एक स्थिर सीडी पाइपलाइन भी बना सकते हैं। बांस डॉकर एकीकरण दोनों बिल्ड एजेंट फॉर्म और आवेदन के भीतर एक बंडल कार्य के रूप में आते हैं। आपको यह आलेख उपयोगी हो सकता है: http://blogs.atlassian.com/2015/06/docker-containers-bamboo-winning-continuous-delivery/

आप किसी डॉकर छवि को बनाने के लिए कार्य का उपयोग कर सकते हैं जिसका उपयोग आप किसी अन्य वातावरण में कर सकते हैं या अपने एप्लिकेशन को कंटेनर पर तैनात कर सकते हैं।

शुभकामनाएं!

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