Sie haben ein Docker-Image erstellt, das Sie mit einem Kollegen teilen möchten? So können Sie ein Image verteilen, ohne dass der Empfänger docker build
ausführen muss selbst.
Teilen eines vorgefertigten Images anstelle eines Dockerfile
können Sie sicher sein, dass Ihr Kollege genau dieselbe Software verwendet. Das erneute Ausführen des Builds könnte zu einer geringfügig anderen Umgebung führen. Je nach Situation haben Sie zwei Möglichkeiten, Ihr Bild zu verteilen.
Verwenden Sie eine Docker-Registrierung
Der einfachste Weg, ein Docker-Image freizugeben, besteht darin, es in eine Docker-Registrierung hochzuladen. Diese Funktionalität ist vollständig in die Docker-CLI integriert. Bei dieser Methode müssen Sie keine manuellen Dateiübertragungen vornehmen.
Die Standardregistrierung ist Docker Hub. Auf diese Weise können Sie Bilder öffentlich teilen und erhalten auch ein privates Repository. Erstellen Sie ein Konto auf Docker Hub und führen Sie dann docker login
aus in Ihrem Endgerät. Geben Sie Ihre Kontodaten an, um die Docker-CLI mit Ihrem Konto zu verbinden.
Erstellen Sie als Nächstes Ihr Image wie gewohnt mit docker build
. Fügen Sie ein Tag hinzu, das mit Ihrem Docker Hub-Benutzernamen beginnt:
docker build -t my-account/my-image:latest .
Verwenden Sie dann den docker push
Befehl, um das markierte Image an Docker Hub hochzuladen:
docker push my-account/my-image:latest
Jetzt ist Ihr Image sicher im Docker Hub gespeichert. Andere Benutzer können es mit docker pull
herunterziehen oder docker run
Befehle. Sie haben Ihr Bild geteilt!
Für den realen Einsatz ist Docker Hub möglicherweise nicht ausreichend. Wenn Sie Teil eines Entwicklungsteams sind, möchten Sie wahrscheinlich Images auf Ihrem eigenen Server statt in der öffentlichen Hub-Registrierung aufbewahren. Sie können stattdessen einen selbst gehosteten Registrierungsserver erstellen, um privaten Speicher zu erhalten, der vollständig mit docker push
kompatibel ist und docker pull
Befehle. Auf diese Weise können Sie Bilder ganz einfach mit jedem teilen, der auf Ihre private Registrierung zugreifen kann.
Bilder exportieren
Wenn die Verwendung einer Registrierung keine Option ist, können Sie Docker-Image-Archive stattdessen manuell exportieren. Diese Funktionalität ist auch in die Docker-CLI integriert. Erstellen Sie Ihr Image und verwenden Sie dann docker save
Befehl, um ein tar
zu erhalten Archiv seines Inhalts:
docker save my-image:latest > my-image.tar
Der Export kann einige Augenblicke dauern. Docker enthält alles, was zum Neuerstellen des Images erforderlich ist – das sind alle Ebenen in Ihrem Dockerfile
, sowie die von Ihrem Basisimage geerbten Ebenen. Das Archiv enthält auch Informationen zu Tags, die dem Bild zugeordnet sind.
Als Ausgabe dient ein einfaches tar
Datei, können Sie sie jetzt frei verteilen, wie Sie möchten. Archive können ziemlich groß sein, daher ist es normalerweise am besten, sie auf einen Dateiserver oder einen Cloud-Speicheranbieter hochzuladen.
Um ein exportiertes Bild zu verwenden, führen Sie docker load
aus Befehl. Dies akzeptiert einen tar
Archiv erstellt von docker save
als Eingangsstrom. Docker lädt den Inhalt des Archivs und fügt ihn Ihrer Liste lokaler Images hinzu.
docker load < my-image.tar
Sie sehen nun das neu importierte Bild in Ihren docker images
Ausgang. Sie sind bereit, einen neuen Container mit docker run
zu starten .
Das Exportieren und Importieren von Images fügt einige zusätzliche Schritte gegenüber der Verwendung einer Docker-Registrierung hinzu. Sie müssen die Datei manuell zwischen den Clients übertragen. Daher ist dieser Ansatz für den häufigen Gebrauch weniger geeignet, obwohl er auch seine Vorteile hat.
Konvertieren von Bildern in ein tar
Archiv kann für die Langzeitspeicherung nützlich sein. Wenn Ihnen der Speicherplatz auf Ihrem Registrierungsserver ausgeht, archivieren Sie alte Bilder und laden Sie deren tars
hoch Die Sicherung des Dateispeichers könnte eine kostengünstige Möglichkeit sein, etwas Kapazität zurückzugewinnen. Sie können das Bild immer noch wiederherstellen, falls dies in Zukunft erforderlich sein sollte.
Was ist mit „Docker-Export“?
Docker hat einen weiteren exportbezogenen Befehl, docker export
. Dies sollte nicht mit docker save
verwechselt werden . Wobei save
funktioniert mit Bildern, export
verwaltet tatsächlich einzelne Container .
docker export
erzeugt ein tar
Archiv des Dateisystems eines Containers. Dies kann verwendet werden, um ein Replikat des Containers auf einem anderen Computer wiederherzustellen. Wenn Sie den Inhalt des Archivs untersuchen, werden Sie feststellen, dass es sich nur um ein normales Linux-Root-Dateisystem mit Verzeichnissen wie /bin
handelt , /etc
und /usr
.
docker export my-container > my-container.tar
docker export
ist nützlich, wenn Sie einen Snapshot eines Containers für eine spätere Wiederherstellung erstellen möchten. Containerarchive werden jedoch nicht so importiert, wie Sie es zunächst erwarten würden. Da ein Container eine aktive, laufende Umgebung darstellt, können Sie ihn nicht direkt „importieren“. Stattdessen erstellt der Import eines Containerarchivs ein neues Bild.
docker import my-container.tar my-image:latest
In diesem Beispiel übernimmt Docker das Dateisystem in my-container.tar
und automatisch ein neues Bild namens my-image:latest
erstellen . Dieser hat dasselbe Dateisystem, aber nicht dasselbe Basis-Image oder dieselbe Docker-Konfiguration wie der ursprüngliche Container, den Sie exportiert haben.
VERBINDUNG: Erste Schritte mit der neuen Docker-Containerregistrierung von Github
Zusammenfassung
Docker macht es einfach, Anwendungs-Images und Entwicklungsumgebungen mit Ihren Mitarbeitern zu teilen. Normalerweise ist es am besten, Bilder in ein zentrales Repository zu verschieben, aus dem alle anderen abrufen können. In einigen Szenarien kann es sinnvoller sein, ein Bild in ein Archiv zu exportieren, das Sie manuell verteilen.
Mit Docker können Sie auch das Dateisystem eines Containers exportieren, um es später in einem Image wiederherzustellen. Seien Sie vorsichtig, wenn Sie dies verwenden, da es sich nicht um eine exakte Rekonstruktion handelt und nicht alle Dateisystemdaten enthalten sind. Alle Volumes, die in den ursprünglichen Container eingebunden sind, werden nicht in das Dateisystemarchiv aufgenommen, daher sollten Sie Schritte unternehmen, um diese separat zu sichern.