Ich spiele ein paar Tage mit Docker herum und habe bereits einige Bilder gemacht (was wirklich Spaß gemacht hat!). Jetzt möchte ich meine Arbeit fortsetzen und bin zu den Befehlen save
und gekommen export
, aber ich verstehe sie nicht vollständig.
Was ist der Unterschied zwischen save
und export
in Docker?
Antworten:
Die kurze Antwort lautet:
save
ruft ein Image ab: Für eine VM oder einen physischen Server ist dies das ISO-Image oder die Festplatte der Installation. Das Basisbetriebssystem.Es packt die Ebenen und Metadaten aller Ketten, die zum Erstellen des Images erforderlich sind. Sie können diese "gespeicherte" Bildkette dann in eine andere Docker-Instanz laden und Container aus diesen Bildern erstellen.
export
holt den gesamten Container ab: wie eine Momentaufnahme einer normalen VM. Speichert natürlich das Betriebssystem, aber auch jede Änderung, die Sie vorgenommen haben, jede Datendatei, die während der Containerlebensdauer geschrieben wurde. Dieser ist eher wie ein traditionelles Backup.Sie erhalten ein flaches .tar-Archiv, das das Dateisystem Ihres Containers enthält.
Bearbeiten: Da meine Erklärung immer noch zu Verwirrung führen kann, denke ich, dass es wichtig ist zu verstehen, dass einer dieser Befehle mit Containern funktioniert, während der andere mit Bildern funktioniert.
Ein Bild muss als "tot" oder unveränderlich betrachtet werden. Wenn Sie 0 oder 1000 Container starten, ändert sich kein einzelnes Byte. Aus diesem Grund habe ich früher einen Vergleich mit einer Systeminstallations-ISO durchgeführt. Es ist vielleicht sogar näher an einer Live-CD.
Ein Container "bootet" das Bild und fügt eine zusätzliche Ebene hinzu. Diese Ebene speichert alle Änderungen im Container (erstellte / geänderte / entfernte Dateien ...).
quelle
docker commit
). Ich kann dannsave
das Bild. Oder ich kannexport
den Container direkt. Und beide Wege (save
das Bild undexport
der Container) haben das gleiche Ergebnis?export
gibt Ihnen ein flaches .tar-Archiv, das Ihr Container-Dateisystem enthält.save
packt die Ebenen und Metadaten aller Ketten, die zum Erstellen des Images erforderlich sind. Sie können diese "saved
" - Image-Kette dann in eine andere Docker-Instanz laden und Container aus diesen Images erstellen.export
Funktion erfolgen.export
alle Metadaten verloren. Wenn Sie also versuchen, den Container mit diesem Image auszuführen, müssen Sie die CMD und andere Metdaten erneut implementieren.save
funktionierte gut für mich, aber der Export war schmerzhaftEs gibt zwei Hauptunterschiede zwischen
save
undexport
Befehlen.save
Der Befehl speichert das gesamte Bild mit Verlauf und Metadaten, derexport
Befehl exportiert jedoch nur die Dateistruktur (ohne Verlauf und Metadaten). Die exportierte TAR-Datei ist also kleiner als die gespeicherte.Wenn Sie exportierte Dateisystem verwenden , um ein neues Bild dann neu in diesem Bild enthalten wird nicht für die Erstellung
USER
,EXPOSE
,RUN
usw. Befehle von Ihrem Dockerfile. Es wird nur die Dateistruktur übertragen. Wenn Sie also die genannten Schlüsselwörter in Ihrer Docker-Datei verwenden, können Sie den Exportbefehl nicht zum Übertragen von Bildern auf einen anderen Computer verwenden. Sie müssen immer den Befehl save verwenden.quelle
Für das exportierte Bild werden keine Ebenen- oder Verlaufsinformationen gespeichert, daher ist es kleiner und Sie können kein Rollback durchführen.
Das gespeicherte Bild wird hat Schicht und Verlaufsinformationen, so größer.
Wenn Sie dies einem Kunden geben, lautet die Frage: Möchten Sie diese Ebenen behalten oder nicht?
quelle
Technisch gesehen funktioniert Speichern / Laden mit Repositorys, bei denen es sich um ein oder mehrere Bilder handeln kann, die auch als Ebenen bezeichnet werden. Ein Bild ist eine einzelne Ebene innerhalb eines Repos. Schließlich ist ein Container ein instanziiertes Bild (läuft oder nicht).
quelle
Docker speichern Erzeugt ein Tar-Datei-Repo, das alle übergeordneten Ebenen und alle Tags + Versionen oder das angegebene Repo: -Tag für jedes aus dem Bild bereitgestellte Argument enthält .
Docker- Export Erzeugt eine angegebene Datei (kann tar oder tgz sein) mit flachem Inhalt ohne Inhalt der angegebenen Volumes aus Container .
Docker Save muss für Docker-Image verwendet werden, während Docker- Export für Container verwendet werden muss (genau wie das Ausführen von Image).
Nutzung speichern
Verwendung exportieren
quelle
export
:container (filesystem)
->image tar
.import
:exported image tar
->image
. Nur eine Schicht.save
:image
->image tar
.load
:saved image tar
->image
. Alle Schichten werden wiederhergestellt.Von Docker in Aktion, Zweite Ausgabe S. 190.
quelle