क्या एक अच्छा docker webdev वर्कफ़्लो होगा?


121

मैं एक कूबड़ है डोकर बहुत मेरी webdev कार्यप्रवाह सुधार सकता है - लेकिन मैं काफी कैसे एक परियोजना ढेर करने के लिए डोकर जोड़ने दृष्टिकोण के आसपास मेरे सिर लपेटो करने में कामयाब नहीं किया है।

मूल सॉफ्टवेयर स्टैक इस तरह दिखेगा:

सॉफ्टवेयर

  • कस्टम LAMP स्टैक प्रदान करने वाली डॉकटर छवि

    • कई मॉड्यूल के साथ अपाचे
    • माई एसक्यूएल
    • पीएचपी
    • कुछ सीएमएस, जैसे सिल्वरस्ट्रिप
  • GIT

कार्यप्रवाह

मैं निम्नलिखित की तरह देखने के लिए वर्कफ़्लो की कल्पना कर सकता हूं:

विकास

  1. Dockerfileऊपर वर्णित आवश्यकताओं को पूरा करने वाले एक LAMP- कंटेनर को परिभाषित करने वाला लिखें
    • REQ: बूट करने के तुरंत बाद मशीन को अपाचे / mysql शुरू करना चाहिए
  2. डॉकटर छवि बनाएँ
  3. CMS को उदा में चलाने के लिए आवश्यक फाइलों को कॉपी करें ~/dev/cmsdir
    • ~/dev/cmsdir/संस्करण नियंत्रण में रखें
  4. Docker कंटेनर चलाएँ, और किसी तरह कंटेनर पर माउंट ~/dev/cmsdirकरें/var/www/
  5. डेटाबेस पॉपुलेट करें
  6. में काम करते हैं /dev/cmsdir/
  7. डॉकटर कंटेनर को कमिट करें और बंद करें

तैनाती

  1. दूरस्थ होस्ट सेट करें (जैसे ansible के साथ)
  2. दूरस्थ मेजबान के लिए कंटेनर छवि को पुश करें
  3. cmsdirगिट के माध्यम से प्राप्त करें
  4. डोकर कंटेनर चलाने के लिए, डेटाबेस में खींच सकते हैं और माउंट cmsdirमें/var/www

अब, यह सब कागज पर काफी अच्छा लग रहा है, लेकिन मुझे यकीन नहीं है कि यह बिल्कुल सही दृष्टिकोण होगा।

प्रशन:

  1. स्थानीय रूप से विकसित होने के दौरान, मुझे कंटेनर उदाहरण के रिबूट के बीच बने रहने के लिए डेटाबेस कैसे मिलेगा? या क्या मुझे कंटेनर से नीचे उतरने से पहले हर बार sql- डंप चलाने की आवश्यकता होगी?

  2. क्या मुझे db और apache सर्वर के लिए अलग-अलग कंटेनर इंस्टेंसेस चाहिए? या उपरोक्त उपयोग के मामले के लिए एक ही कंटेनर रखना पर्याप्त होगा?

  3. यदि डेटाबेस और सर्वर के लिए अलग-अलग कंटेनरों का उपयोग किया जाता है, तो मैं एक ही समय में उन्हें ऊपर और नीचे कताई को कैसे स्वचालित कर सकता हूं?

  4. मैं वास्तव /dev/cmsdir/में कंटेनरों में कैसे माउंट करूँगा /var/www/-directory क्या मुझे इसके लिए डेटा-वॉल्यूम का उपयोग करना चाहिए ?

  5. क्या मुझे कोई नुकसान हुआ? कुछ भी है कि सरलीकृत किया जा सकता है?


1
यह प्रश्न काफी लोगों को दिलचस्प लगता है। लगता है किसी ने हाल ही में इस विषय पर एक ब्लॉगपोस्ट श्रृंखला लिखी है। चूंकि यह अब तक पूरा नहीं हुआ है, मैं इस टिप्पणी में लिंक पोस्ट करेंगे: project-webdev.blogspot.de/2015/05/...
jottr

जवाबों:


46
  1. यदि आपको अपने CMS कंटेनर के डेटाबेस दृढ़ता की आवश्यकता है, तो आप MySQL के लिए एक कंटेनर और अपने CMS के लिए एक कंटेनर का उपयोग कर सकते हैं। ऐसे मामले में, आप अपने MySQL कंटेनर को अभी भी चालू रख सकते हैं और अपने CMS को जितनी बार चाहें उतनी बार स्वतंत्र रूप से पुन: उपयोग कर सकते हैं।

    विकास के लिए - एक अन्य विकल्प डेटा वॉल्यूम का उपयोग करके अपने होस्ट / विकास मशीन से mysql डेटा निर्देशिकाओं को मैप करना है। इस तरह आप mysql के लिए डेटा फ़ाइलों को प्रबंधित कर सकते हैं (docker में) git (होस्ट पर) और "reload" प्रारंभिक स्थिति को कभी भी जो आप चाहते हैं (mysql कंटेनर शुरू करने से पहले) का उपयोग कर सकते हैं।

  2. हाँ, मुझे लगता है कि आपके पास db के लिए एक अलग कंटेनर होना चाहिए।

  3. मैं सिर्फ मूल स्क्रिप्ट का उपयोग कर रहा हूं:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. हां, आप डेटा-वॉल्यूम -v स्विच का उपयोग कर सकते हैं। मैं इसका इस्तेमाल विकास के लिए करूंगा। आप रीड-ओनली माउंटिंग का उपयोग कर सकते हैं, इसलिए इस निर्देशिका में कोई परिवर्तन नहीं किया जाएगा यदि आप चाहते हैं (आपका ऐप कहीं और भी डेटा स्टोर करना चाहिए)।

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    

    वैसे भी, अंतिम तैनाती के लिए, मैं निर्माण और छवि का उपयोग कर dockerfile के साथ होगा ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. मुझे नहीं पता :-)


6
मैंने एक mysql कंटेनर लिखने के बारे में एक ट्यूटोरियल लिखा, जिसमें आप # 1 txt.fliglio.com/2013/11/creating-a-mysql-docker-container के
बेन स्कॉलरशिप

48
इस प्रक्रिया पर निश्चित रूप से अधिक ट्यूटोरियल / सर्वोत्तम अभ्यास करने की आवश्यकता है। :(
रेजा एस

यह ट्यूटोरियल आपको कुछ दिशा दे सकता है ..
पिथिकोस

यदि आप Docker में Github से कोड खींच रहे हैं, तो यह लिंक आसानी से SSH कुंजी (ताकि Docker छवि को सार्वजनिक रूप से सूचीबद्ध किया जा सके) slash-dev-blog.me/docker-git.html
jhtb

4
2015 के रूप में @RoyTruelove, अंजीर अब
docker-

9

आप डॉकटर-कंपोज का उपयोग करना चाहते हैं। यहाँ ट्यूटोरियल का पालन करें। बहुत आसान। अपने सभी बक्से टिक करने के लिए लगता है।

https://docs.docker.com/compose/


4

मैं समझता हूं कि यह पोस्ट इस समय एक वर्ष से अधिक पुरानी है, लेकिन मैंने हाल ही में खुद से बहुत ही समान प्रश्न पूछे हैं और आपके प्रश्नों के कई शानदार उत्तर हैं।

  1. आप एक MySQL docker इंस्टेंस को सेट कर सकते हैं और डेटा एक स्टेटलेस डेटा कंटेनर पर बना रहता है, उर्फ ​​डेटा कंटेनर को आसानी से चलाने की आवश्यकता नहीं होती है

  2. हाँ, मैं आपके वेब सर्वर और डेटाबेस के लिए एक अलग उदाहरण रखने की सलाह दूंगा। यह डॉकर की शक्ति है।

  3. मेरे द्वारा बनाए गए इस रेपो को देखें। मूल रूप से यह रूप में सरल रूप में है make buildऔर make runऔर आप एक वेब सर्वर और डेटाबेस कंटेनर स्थानीय स्तर पर चल रहा है हो सकता है।

  4. आप -vपहली बार कंटेनर चलाते समय तर्क का उपयोग करते हैं , यह कंटेनर पर एक विशिष्ट फ़ोल्डर को कंटेनर को चलाने वाले होस्ट से लिंक करेगा।

  5. मुझे लगता है कि आपके विचार महान हैं और वर्तमान में वह सब हासिल करना संभव है जो आप पूछ रहे हैं।

यहाँ आपके द्वारा सूचीबद्ध सभी आवश्यकताओं को प्राप्त करने वाला एक टर्न की सॉल्यूशन है


1

मैंने डॉकटर कंपोज़ सेटअप का उपयोग करने के लिए एक आसान रखा है जो आपके विकास वर्कफ़्लो की आवश्यकताओं से मेल खाना चाहिए।

https://github.com/ehyland/docker-silverstripe-dev

मुख्य विशेषताएं

  • लगातार डी.बी.
  • आपकी पसंद HHVM+ NGINXया Apache2+PHP5
  • डीबग और xDebug के साथ विराम बिंदु सेट करें

README.md स्पष्ट पर्याप्त आरंभ करने के लिए होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.