2014-11-30 11 views
23

क्या डॉकर के साथ दो छवियों को एक साथ जोड़ना संभव है?डॉकर: एकाधिक छवियों को मिलाएं

यह यहाँ की तरह:

genericA -- 
      \ 
      ---> specificAB 
      /
genericB -- 

उदाहरण के लिए वहाँ जावा के लिए एक छवि और MySQL के लिए एक छवि है।

मुझे जावा और MySQL के साथ एक छवि चाहिए।

उत्तर

8

नहीं, आप केवल एक छवि से प्राप्त कर सकते हैं।

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

हालांकि, अगर आपको वास्तव में एक ही छवि में होना चाहिए, तो जावा के साथ एक डॉकरफ़ाइल को मूल छवि (विवरण से) के रूप में लिखें और डॉकरफ़ाइल में MySQL इंस्टॉल करें। आप आधिकारिक MySQL Dockerfile से बयानों की मोटे तौर पर प्रतिलिपि बनाने में सक्षम होना चाहिए।

+0

आपके उत्तर के लिए धन्यवाद। चूंकि मैं डॉकर के लिए बहुत नया हूं (मैंने इसे 3 घंटे पहले स्थापित किया ;-) एक त्वरित अनुवर्ती प्रश्न: मुझे डॉकफाइल की आवश्यकता क्यों है? क्या मैं सिर्फ एक नहीं बना सकता, यह सुनिश्चित नहीं कर सकता कि इसे "डॉकर-टर्म", जावा कंटेनर का स्नैपशॉट (?) में कैसे बुलाया जाता है और उसके बाद मैन्युअल रूप से MySQL (apt-get, आदि के साथ) स्थापित किया जाता है? – Frizz

+0

आप इसे "डॉकर प्रतिबद्ध" के साथ कर सकते हैं। समस्या यह है कि यह दोहराने योग्य नहीं है, इसलिए यदि आप कुछ बदलना चाहते हैं तो आपको फिर से खरोंच से शुरू करना होगा। डॉकफाइल निश्चित रूप से जाने का रास्ता हैं। –

1

आप docker commit करते हैं, यह देखने के लिए कि क्या कमांड क्रम में इस्तेमाल किया गया अपने कंटेनर का निर्माण करने के काम नहीं है, आप आप एक Dockerfile है, तो बस उसे देखें एक docker history image

जारी करने के लिए है और आप देखते हैं कि कैसे यह बनाया गया था और इसमें क्या शामिल है।

डॉकर प्रतिबद्धता 'हाथ से' है, इसलिए त्रुटियों के लिए प्रवण, docker build एक डॉकरफाइल का उपयोग करके काम करता है जो बहुत बेहतर है।

-3

आप एक ही डॉकरफ़ाइल में एकाधिक FROM आदेश डाल सकते हैं।

https://docs.docker.com/reference/builder/#from

+7

'एकाधिक छवियों को बनाने के लिए FROM एक एकल डॉकरफ़ाइल ** के भीतर कई बार प्रदर्शित हो सकता है। **' - आपके लिंक से। इसलिए, यह छवियों को गठबंधन नहीं करता है, बल्कि इसके बजाय कई छवियां बनाते हैं – luxas

9

डोकर सीधे इस का समर्थन नहीं करता है, लेकिन आप DockerMake (पूर्ण प्रकटीकरण: मैं इसे लिखा था) का उपयोग कर सकते "विरासत" इस तरह की प्रबंधन करने के लिए। यह छवि के अलग-अलग टुकड़ों को स्थापित करने के लिए एक वाईएएमएल फ़ाइल का उपयोग करता है, फिर उचित डॉकरफ़ाइल उत्पन्न करके बिल्ड को चलाता है।

यहां बताया गया है कि आप इस से थोड़ा अधिक जटिल उदाहरण का निर्माण होगा:

         --> genericA -- 
            /    \ 
     debian:jessie --> customBase     ---> specificAB 
            \    /
             --> genericB -- 

आप इस DockerMake.yml फ़ाइल का प्रयोग करेंगे:

specificAB: 
    requires: 
    - genericA 
    - genericB 

genericA: 
    requires: 
    - customBase 
    build_directory: [some local directory] 
    build: | 
    #Dockerfile commands go here, such as 
    ADD installA.sh 
    RUN ./installA.sh 

genericB: 
    requires: 
    - customBase 
    build: | 
    #Here are some other commands you could run 
    RUN apt-get install -y genericB 
    ENV PATH=$PATH:something 

customBase: 
    FROM: debian:jessie 
    build: | 
    RUN apt-get update && apt-get install -y buildessentials 

docker-make CLI उपकरण (pip install dockermake) स्थापित करने के बाद, आप तो निर्माण कर सकते हैं specificAB छवि

docker-make specificAB 
संबंधित मुद्दे