2017-11-10 2 views
0

Angenommen, Sie haben ein Andock-Image, und Sie reduzieren es oder quetschen es, um die Größe zu reduzieren. Dies ist vorteilhaft für Laufzeitartefakte, sodass sie möglicherweise nur minimale Ressourcen für Speicherung und Schieben/Ziehen benötigen.Wird ein Docker-Image nicht durch Komprimierung/Verflachung beeinträchtigt?

Aber ich frage mich, ob es einen Kompromiss zwischen Abflachung (produzieren eine einzelne gequetschte Ebene) und Layer Wiederverwendung, die von einer Container-Registrierung auftritt, wenn Sie Ihr Bild drücken, um es zu speichern.

Hier ist ein Beispiel: Angenommen, Sie haben ein Bild mit mehreren Ebenen - ein normales altes Docker-Bild - und es ist vielleicht 500 MB groß. Sie verwenden Squashing oder Abflachung, um es zu einer einzelnen Schicht zu komprimieren, die 250 MB groß sein kann.

Nehmen wir an, Sie müssen eine Änderung an Ihrem Bild vornehmen, eine Version 2 erstellen. Version 2 ist eine sehr geringfügige Änderung in einer späten Schicht des Containers, möglicherweise den Namen einer Einstellungsdatei direkt vor der CMD Anweisung ändern oder so.

In dem Fall, wo Sie eine Reihe von erweiterten Ebenen in die Registrierung verschoben haben, wenn Sie gehen, um dieses neue Bild zu schieben, muss nur die abweichende letzte Ebene im Cache der Registrierung gespeichert werden, was die Summe bedeuten kann Die Größe (für das Ausgangsbild und das neue Bild der Version 2 zusammen) beträgt je nach der zuletzt geänderten Ebene 550 MB oder so.

In dem Fall, in dem Sie es abgeflacht haben, ist Ihr neues Version 2-Abbild nur ein völlig neues Einzelschichtbild, das mit dem ursprünglichen Container keine Historie hat. (Vielleicht kann Ihre lokale Docker-Instanz die Schicht Geschichte für die Abflachung sehen, aber die Registrierung hat es nicht).

In diesem Fall müssen Sie etwa 500 MB in der Registrierung speichern: jeweils 250 MB für die erste und zweite Version des Bildes.

Klar können Sie sehen, sobald wir dies ein drittes Mal tun, ist der Gesamtraum der abgeflachten Bilder tatsächlich größer als der Raum der inkrementellen Änderungen zu erweiterten Schichtbildern.

Gibt es etwas, das mir an der Funktionsweise fehlt? Es schlägt vor, dass Sie nur die Abflachung in dem Moment durchführen möchten, bevor Sie den Container an seinen endgültigen Bestimmungsort zur Verwendung versenden - aber Sie würden nicht im Allgemeinen die Abflachung beim Speichern in einer Registrierung vornehmen möchten.

Es könnte Eckenfälle geben, in denen das Basisbild so groß ist und die Abflachung so viel Verkleinerung ergibt, dass es sich lohnt, aber ich versuche den allgemeinen Fall zu verstehen, und ich kann keine Dokumentation finden, die diesen speziellen Aspekt der Schicht diskutiert Abflachung.

Antwort

1

Durch das Komprimieren eines Bilds wird die Verwendung von zwischengespeicherten Bildebenen entfernt und der Speicherplatz erhöht, der für mehrere Kopien des Bildes verwendet wird. Aus diesem Grund muss ich es noch mit meinen Kunden verwenden. Der bevorzugte Weg, dies zu tun, besteht darin, die Docker-Datei so zu konfigurieren, dass der Cache der vorherigen Builds eines Bildes so weit wie möglich wiederverwendet wird.

Wenn Sie sehen, dass die Bildgröße von einem Squash um 50% reduziert wird, gibt es oft eine bessere Möglichkeit, die Dockerfile zu strukturieren, um das Aufblähen der Ebene zu vermeiden. Die übliche Situation, die ich von diesem Quetschen verstehe, ist, wenn Sie eine große Datei aus dem Kontext mit einer COPY kopieren und dann diese Datei in einem zukünftigen RUN Befehl ändern oder später löschen müssen. Es gibt keine Möglichkeit, einen COPY und RUN Befehl miteinander zu verketten.Sie können möglicherweise die COPY in eine RUN curl http://local-artifact-repo/... konvertieren. Oder mit mehrstufigen Builds können Sie jetzt alle COPY und andere RUN Befehle in einer Stufe ausführen und dann COPY das Ergebnis im endgültigen Bild. Die letzte COPY würde zu einer völlig neuen Ebene führen, selbst wenn Sie nur eine kleine Änderung vorgenommen hätten, aber das würde die Befehle in einer RUN verketten.

Verwandte Themen