2016-01-18 5 views
6

मैं डॉकर-कंपोज़ का उपयोग करके ऑर्केस्ट्रेटेड 'सिस्टम' में एक सेवा पर काम कर रहा हूं। यह सेवा एक संकलित भाषा में लिखी गई है और जब मैं बदलाव करता हूं तो मुझे इसे पुनर्निर्माण करने की आवश्यकता होती है। मैं परिवर्तनों पर तेज़ी से पुन: प्रयास करने का सबसे अच्छा तरीका ढूंढने की कोशिश कर रहा हूं।एक डॉकर-कंपोज़ सेटअप में संकलित घटकों के लिए डॉकर डेवलपमेंट वर्कफ़्लो

मैंने 2 'वर्कफ़्लो' की कोशिश की है, दोनों नवीनतम स्रोत प्राप्त करने के लिए volume: के माध्यम से स्रोत निर्देशिका से जुड़े होने पर भरोसा करते हैं।

  • सभी के साथ docker-compose up -d
  • बंद करो विकास के तहत सेवाओं और रन
  • एक नए कंटेनर भागो कि कंटेनर रन के भीतर छवि docker-compose run --name SERVICE --rm SERVICE /bin/bash
  • का उपयोग कर संकलन के लिए कंटेनर समर्थन कंटेनर लाओ खुला बंदरगाह पर आवेदन।
  • चल रही प्रक्रिया को रोकने और फिर पुनर्निर्माण करके पुनरारंभ करें। docker-compose kill SERVICE
  • पुनः प्रारंभ सेवा docker-compose up -d --no-deps SERVICE

समस्या दोनों है: बी

  • बंद करो सेवा (निर्माण करने के लिए और फिर से चलाने के सेवा Dockerfile CMD की आवश्यकता है) को स्थानीय रूप से सेवा को पुनरारंभ करने के लिए बहुत लंबा समय लगता है (मेरे लैपटॉप पर स्वतंत्र रूप से चल रहा है o एफ डॉकर)। यह सेटअप व्याख्या की गई भाषाओं के साथ ठीक प्रतीत होता है जो बदली गई फ़ाइलों को हॉट-रीलोड कर सकते हैं लेकिन मुझे अभी तक संकलित भाषा सेवाओं के लिए एक उपयुक्त फास्ट सिस्टम नहीं मिला है।

+1

क्या आपके लैपटॉप पर डॉकर चल रहा है, या दूरस्थ रूप से? आश्चर्य की बात है कि "स्थानीय रूप से सेवा को पुनरारंभ करना" के साथ आपका क्या मतलब है। क्या इसे "पुनरारंभ करने में बहुत लंबा" लग रहा है? धीमा संकलन कर रहा है? शुरुआत में? – thaJeztah

+0

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

+0

आह, ठीक है, मेरा सबसे अच्छा अनुमान यह है कि, सबसे पहले, मेजबान और वर्चुअलबॉक्स वीएम के बीच फ़ाइल साझा करना (अच्छी तरह से कहने के लिए) बहुत प्रदर्शन नहीं; यह वर्चुअलबॉक्स filesharing की एक सीमा है। दूसरा, वीएम अधिकतम प्रदर्शन के लिए ट्यून नहीं किया जा सकता है, जो संकलन अवधि में अंतर डाल सकता है। क्या आपने कोशिश की है, उदा। वीएम के लिए स्मृति की मात्रा और/या सीपीयू की संख्या बढ़ाएं? – thaJeztah

उत्तर

3

मैं यह कर जाएगा:

भागो docker-compose up लेकिन:

  • संकलित द्विआधारी स्रोत
  • की बजाय निर्देशिका के लिए एक मेजबान मात्रा का उपयोग एक entrypoint ऐसा ही कुछ होता है का उपयोग

entrypoint.sh:

trap "pkill -f the_binary_name" SIGHUP 
trap "exit" SIGTERM 

while [[ 1 ]]; do 
    ./the_binary_name; 
done 

एक स्क्रिप्ट लिखें द्विआधारी के पुनर्निर्माण के लिए, और वॉल्यूम docker-compose.yml में सेवा द्वारा उपयोग किया में कॉपी:

# Run a container to compile and build the binary 
docker run -ti -v $SOURCE:/path -v $DEST:/target some_image build_the_binary 

# copy it to the host volume directory 
copy $DEST/... /volume/shared/with/running/container 

# signal the container 
docker kill -s SIGHUP container_name 

तो द्विआधारी आप इस स्क्रिप्ट का उपयोग, जो स्रोत और एक mounts संकलित करने के लिए वॉल्यूम्स के रूप में गंतव्य निर्देशिका। यदि आप $DEST "रन" कंटेनर के साथ साझा की गई वॉल्यूम निर्देशिका के समान हैं तो आप प्रतिलिपि चरण छोड़ सकते हैं। अंत में स्क्रिप्ट चलने वाले कंटेनर को पुरानी प्रक्रिया को मारने के लिए संकेत देगी (जो पुरानी बाइनरी चला रही थी) और नया शुरू करें।

यदि साझा मात्रा एक कंटेनर में बहुत धीमी गति से संकलन कर रही है, तो आप होस्ट पर संकलन भी चला सकते हैं और केवल एक कंटेनर में चलाने के लिए प्रतिलिपि और सिग्नलिंग कर सकते हैं।

इस समाधान में अतिरिक्त लाभ है कि आपकी "रनटाइम" छवि को सभी देव निर्भरताओं की आवश्यकता नहीं है। यह सिर्फ एक नंगे ओएस बेस के साथ एक बहुत दुबला छवि हो सकती है।

+1

हाय, गहराई से जवाब में इसके लिए धन्यवाद। इसने बहुत समझाया है। जैसा कि आप यहां रूपरेखा करते हैं, मैं इसे बहुत अधिक काम करने में सक्षम हूं। एक अंतर, मैं 'डॉकर मार-एसआईएसयूपी' काम करने में सक्षम नहीं था, मैं इसके बजाय 'डॉकर exec वेब pkill -f कंटेनर_नाम' का उपयोग कर रहा हूं। यह तेज़ नहीं हो सकता है लेकिन इस विधि में स्विच करने से एक 'पुनरावृत्ति' के लिए महत्वपूर्ण समय कम हो गया है। धन्यवाद। –

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