डॉकटर कंटेनर में मेरे विकास के वातावरण को चलाने के क्या लाभ हैं?


12

मैं मुख्य रूप से विंडोज पर विजुअल स्टूडियो का उपयोग कर विकसित करता हूं। समस्या यह है कि थोड़ी देर के बाद विंडोज बंद हो जाता है और मुझे विंडोज को फिर से स्थापित करने की आवश्यकता होती है। इसी तरह नई मशीनों पर स्विच करना एक समस्या है।

Windows को पुनर्स्थापित करना दर्दनाक है क्योंकि मेरे विकास के वातावरण में बहुत अधिक निर्भरताएं हैं (जैसे अतिरिक्त MSBuild कॉन्फ़िगरेशन फ़ाइलें, VS एक्सटेंशन, npm, Java आदि)। मुझे नहीं लगता कि मैं एक जटिल प्रणाली होने में अकेला हूँ, और इसे वापस स्थापित करने में शायद न्यूनतम एक दिन लगेगा।

मैंने वास्तव में डॉकर का उपयोग नहीं किया है, लेकिन सिद्धांत रूप में यह ऐसा लगता है कि मैं अपने देव वातावरण को विंडोज कंटेनर में सेट कर सकता हूं और फिर इसे चारों ओर शिप कर सकता हूं (उदाहरण के लिए मेरे लैपटॉप पर कॉपी करें, एक नए विंडोज इंस्टॉल में डाल दें) और यह दर्द रहित होना चाहिए। ।

क्या मैं संभव का वर्णन कर रहा हूँ? क्या प्रदर्शन, विश्वसनीयता जैसी कोई गिरावट है? अन्य गोत्र?


मैं उत्सुक हूं कि आप एक विकास के माहौल के साथ क्या कर सकते हैं जो विंडोज को "घिनौना होने का कारण बनता है।" Node, VS और कुछ प्लगइन्स इंस्टॉल करने से कोई समस्या नहीं होनी चाहिए।
neilsimp1

@ neilsimp1 आप सही कह रहे हैं, लेकिन वास्तविकता कुछ और है जैसे वीएस के 4 संस्करण, संपादक, पेंट टूल्स, एंड्रॉइड स्टूडियो, नेटबीन, ऑफिस, क्रैशप्लान, गिट, टोर्टोइस वीवीएन, फिडलर, रिमोट डेस्कटॉप, कॉन्फ्रेंसिंग, स्काइप, वायरशर, वीएमवेयर और इत्यादि।
जिम डब्ल्यू का कहना है कि मोनिका

एक साइड-नोट के रूप में, आपको डिस्क क्लोनिंग उपयोगिताओं में देखना चाहिए। आप अपना OS + सभी आवश्यक सॉफ़्टवेयर स्थापित कर सकते हैं और सब कुछ ठीक से कॉन्फ़िगर कर सकते हैं। फिर अपनी डिस्क का एक क्लोन बनाएं और इसे कहीं पीछे कर दें। जब आपको सब कुछ "रीसेट" करने की आवश्यकता होती है, तो बस उस क्लोन से पुनर्स्थापित करें और आपका काम हो गया। ऐसे कई उपकरण हैं जो ऐसा कर सकते हैं और आपकी स्थिति में यह आपको दर्जनों घंटे बचा सकता है :)।
रादु मुरझिया

जवाबों:


13

यह कोई असामान्य समस्या नहीं है, लेकिन डॉकर वास्तव में इसे हल करने के लिए सही उपकरण नहीं है। सामान्य रूप से कंटेनरों (डॉकटर सहित) का उद्देश्य एकल प्रक्रिया के लिए एप्लिकेशन रनटाइम प्रदान करना है , जैसे कि वेब सर्वर, न कि मल्टी-प्रोसेस परिदृश्य जैसे कि देव वातावरण। में कर सकते हैं किया जा है, लेकिन एक बहुत ही सुंदर समाधान नहीं है।

एक बेहतर (और अधिक सामान्य) दृष्टिकोण VMs को पारंपरिक हाइपरविजर जैसे कि वर्चुअलबॉक्स या हाइपर-वी (जब से आप विंडोज पर हैं) के माध्यम से बनाना है। एक सामान्य वर्कफ़्लो है:

  • अपने पसंदीदा ओएस स्वाद के आधार पर आधार वीएम छवि ढूंढें या बनाएं। यह सीधे इंस्टॉलर आईएसओ के साथ किया जा सकता है, या आपके कार्यस्थल में किसी के पास पहले से ही हो सकता है।
  • बेस इमेज बन जाने के बाद, उन सभी डेव टूल्स और सेटिंग्स को जोड़ें, जिनकी आपको ज़रूरत है। स्नैपशॉट या इसे एक अलग छवि के रूप में सहेजें।
  • अब आप इस छवि को आरडीपी या रिमोट में चला सकते हैं, और तब तक काम कर सकते हैं जब तक कि आप एक ऐसे बिंदु पर न पहुँच जाएँ जहाँ आप "आपस में टकरा जाते हैं", और फिर अपनी ज़रूरत की फाइलों को सहेज लें (स्रोत नियंत्रण के लिए, आदि), फिर झटका दें। छवि को दूर करें और आपके द्वारा बनाए गए दो स्नैपशॉट / छवियों में से फिर से शुरू करें। यह सेकंड में किया जा सकता है, बनाम एक दिन तक पुराने ढंग का।
  • रेखा के साथ किसी भी बिंदु पर, अतिरिक्त स्नैपशॉट बनाएँ जब आप ऐसी परिस्थितियों का सामना करते हैं जिन्हें आप समस्या को पुन: उत्पन्न करने के लिए रोलबैक करना चाहते हैं, आदि।

अधिक संरचित तरीके से उपरोक्त में से कुछ करने के लिए वैग्रंट भी एक शानदार उपकरण है।

इस सब का एक साइड बेनिफिट यह है कि अब आपके पास मानकीकृत वातावरण है जिसे आपकी पूरी टीम के साथ साझा किया जा सकता है, जिससे सभी का प्रयास बच जाएगा। यह नए लोगों पर जल्दी से सवार होने के लिए विशेष रूप से महान है।

अपने मूल प्रश्न पर वापस जाएं, डॉकर वास्तव में इसके लिए अभिप्रेत नहीं है, लेकिन अगर आपके पास एक छोटा सा देव वातावरण (लिनक्स पर PHP कहें), तो आप इसे एक कंटेनर में कर सकते हैं, और लाभ बहुत छोटी छवि होगी (संभावित रूप से वर्चुअल डिस्क के साथ विंडोज वीएम के लिए 100 एमबी बनाम कई जीबी के तहत)।


2

एक डॉकटर कंटेनर में नहीं, लेकिन एन डॉक कंटेनर में हां।

जबकि आप कर सकते हैं - सैद्धांतिक रूप से - एक एकल कंटेनर के अंदर अपने पूरे देव वातावरण को इकट्ठा करो, डॉकटर ऐसा करने के लिए नहीं था।

इसके बजाय आप अलग कंटेनर में प्रत्येक सेवा लागू करना चाहिए का उपयोग कर, डोकर लिखें , एक एकल फाइल है, जहां प्रत्येक सेवा का स्वयं का लॉगफ़ाइल, यूज़रस्पेस, नेटवर्किंग, आदि होंगे में अपने पूरे बुनियादी ढांचे के प्रबंधन

मैं आपको एक उदाहरण देता हूं, यह मेरा एक मसौदा है docker-compose.yml

version: '2'
services:

  myproxy:
    build: myproxy
    container_name: ppproxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      default:
        aliases:
          - www.domain1.it
          - www.domain2.it
          - www.domain4.it

  mydb1:
    build: mydb
    environment:
      DB_USER: sdffdssdf
      DB_PASSWORD:  fdsfsdsdf
      DB_NAME: dbanme1
      DB_ENCODING: UTF-8    
      VIRTUAL_HOST: myhost1.net.lan
      VIRTUAL_PORT: 5432

  mydb2:
    build: mydb
    environment:
      DB_USER: ssdfsdfs
      DB_PASSWORD:  sffdssd
      DB_NAME: dbanme2
      DB_ENCODING: UTF-8    
      VIRTUAL_HOST: myhost2.net.lan
      VIRTUAL_PORT: 5432

  www:
    image: myimages/oldservice:v1.1
    container_name: www
    command: /bin/bash /root/launch
    environment:
        VIRTUAL_HOST: www.domain1.it
        VIRTUAL_PORT: 80
    ports:
      - 80
    depends_on:
      - mydb1
      - mydb1
      - myws

  myws:
    build: myjettycontainer
    environment:
        HTTPS_METHOD: noredirect
        VIRTUAL_HOST: www.domain2.it
        VIRTUAL_PORT: 8080
    ports:
      - 8080
    depends_on:
      - mydb1
      - mydb2
      - myproxy
      - mypostfix

  mypostfix:
    image: catatnight/postfix
    container_name: mailer
    environment:
      maildomain: domain1.it
      smtp_user: mymail:sfsfdfds
    ports:
      - 25

एक नेगनेक्स प्रॉक्सी (मायप्रोक्सी), दो समान पोस्टग्रैज डेटाबेस (mydb1 और 2), एक पुराना जावा वेब एप्लिकेशन सर्वर (www), एक जावा जेट्टी कंटेनर है जो एक आराम वेब सेवा प्रदान करता है और अंत में एक बहुत ही सरल सीपीटी पोस्टफ़िक्स कंटेनर है।

सब कुछ शुरू होता है - आम तौर पर :) - के साथ docker-compose up, मेरी देव मशीन पर या उत्पादन में; लॉग फ़ाइलों को फ़ाइल को पढ़ने के लिए एक आसान में एकत्रित किया जाता है और यह गारंटी के साथ स्थानीय रूप से लगभग हर कार्यक्षमता को दोहराने के लिए संभव है कि, अगर यह मेरे लैपटॉप पर काम करता है तो यह काम करेगा।


2

मैं इस तरह की चीज के लिए VirtualBox VMs का उपयोग करता हूं।

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

मुझे ऐसा करने में मददगार भी लगता है क्योंकि मैं अक्सर क्यूटी जैसी चीजों के कई संस्करणों के साथ काम करता हूं, और मुझे यह नहीं लगता है कि दो संस्करणों को सह-अस्तित्व में कैसे लाया जाए - इसके बजाय, मैंने उन्हें अलग-अलग वीएम पर रखा और मुझे इंटरैक्शन के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि मैंने कुछ गलत तरीके से स्थापित किया है।

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