2016-03-31 13 views
6

मैंने इस जानकारी को डॉकर आधिकारिक दस्तावेज़ों के आसपास खोजने की कोशिश की, लेकिन इसमें कोई सफलता नहीं मिली।कैसे डॉकर प्रत्येक परत के हैश की गणना करता है? क्या यह निर्धारक है?

प्रत्येक प्रतिबद्ध/परत के हैश की गणना करते समय डॉकर किस जानकारी के बारे में जानकारी लेता है?

यह बहुत स्पष्ट है कि डॉकरफ़ाइल में रेखा हैश का हिस्सा है और, ज़ाहिर है, माता-पिता प्रतिबद्ध हैश। लेकिन क्या इस हैश की गणना करते समय कुछ और ध्यान में रखा गया है?

कंक्रीट उपयोग केस: मान लीजिए कि मेरे पास अलग-अलग मशीनों में अलग-अलग बिंदुओं पर (और इसके कारण, विभिन्न डॉकर डिमन्स और विभिन्न कैश) के कारण दो देव हैं, उसी डॉकरफाइल के विरुद्ध $ docker build ... चल रहे हैं। FROM ... निर्देश उन्हें एक ही प्रारंभिक बिंदु देगा, लेकिन क्या प्रत्येक ऑपरेशन के परिणामस्वरूप हैश उसी हश पर परिणाम देगा? क्या यह निर्धारक है?

+1

डोकर 1.10 एक नई सामग्री पता भंडारण मॉडल पेश किया: देखने https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/ – molivier

+1

में गहराई से अधिक जानकारी डिजाइन दस्तावेज़ में पाया जा सकता है; https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations – thaJeztah

+0

धन्यवाद @molivier और @thaJeztah! बहुत अच्छा पढ़ा! ऐसा लगता है कि यह सवाल बहुत अधिक गहरा है कि मैं उम्मीद कर रहा था! –

उत्तर

0

धन्यवाद @ thaJeztah। जवाब है https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations

    में
  1. layer.DiffID: एक व्यक्ति परत

    गणना के लिए ID: DiffID = SHA256hex (असम्पीडित परत टार डेटा)

  2. layer.ChainID: के लिए आईडी एक परत और उसके माता-पिता। यह आईडी परतों के एक सेट से बना फाइल सिस्टम को विशिष्ट रूप से पहचानती है।

    गणना:

    • नीचे की परत के लिए: ChainID (layer0) = DiffID (layer0)
    • अन्य परतों के लिए: ChainID (layerN) = SHA256hex (ChainID (layerN -1) + "" + DiffID (layerN))
  3. image.ID: एक छवि के लिए आईडी। चूंकि छवि कॉन्फ़िगरेशन छवियों का उपयोग करने वाली परतों का संदर्भ देता है, इसलिए यह आईडी फाइल सिस्टम डेटा और शेष छवि कॉन्फ़िगरेशन को शामिल करती है।

    गणना: SHA256hex (imageConfigJSON)

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