2016-03-31 5 views
6

Ich habe versucht, diese Informationen rund um die offiziellen Docker-Dokumente zu finden, hatte aber keinen Erfolg.Wie Docker den Hash jeder Ebene berechnet? Ist es deterministisch?

Welche Informationen berücksichtigt Docker bei der Berechnung des Hashs für jeden Commit/Layer?

Es ist ziemlich offensichtlich, dass die Zeile in der Dockerfile Teil des Hash ist und natürlich der Eltern-Commit-Hash. Aber wird bei der Berechnung dieses Hashes etwas anderes berücksichtigt?

Konkrete Anwendungsfall: Nehmen wir an, ich habe zwei Devs in verschiedenen Maschinen, an verschiedenen Punkten in der Zeit (und aus diesem Grund verschiedene Docker Daemons und verschiedenen Caches) $ docker build ... gegen den gleichen Dockerfile läuft. Die Direktive FROM ... gibt ihnen den gleichen Startpunkt, aber ergibt der resultierende Hash jeder Operation denselben Hash? Ist es deterministisch?

+1

Docker 1.10 neues inhaltsadressierbaren Speichermodell eingeführt: siehe https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/ – molivier

+1

mehr in die Tiefe gehende Informationen finden Sie im Design-Dokument; https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations – thaJeztah

+0

Dank @molivier und @thaJezztah! Sehr gut zu lesen! Es scheint, dass diese Frage viel tiefer ist, als ich erwartet hatte! –

Antwort

0

Danke @thaJeztah. Antwort ist in https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations

  1. layer.DiffID: ID für eine einzelne Schicht

    Berechnung: DiffID = SHA256hex (unkomprimiert Schicht tar Daten)

  2. layer.ChainID: ID für eine Schicht und ihre Eltern. Diese ID identifiziert ein Dateisystem, das aus einer Gruppe von Layern besteht, eindeutig.

    Berechnung:

    • Für Bodenschicht: ChainID (Layer0) = DiffID (Layer0)
    • Für andere Schichten: ChainID (Layern) = SHA256hex (ChainID (Layern-1) + "" + DiffID (Layern))
  3. image.ID: ID für ein Bild. Da die Bildkonfiguration auf die vom Bild verwendeten Ebenen verweist, enthält diese ID die Dateisystemdaten und den Rest der Bildkonfiguration.

    Berechnung: SHA256hex (imageConfigJSON)

Verwandte Themen