GNU/Linux >> LINUX-Kenntnisse >  >> Linux

7 unterhaltsame Funktionen für Linux-Container/Image-Transporte

Eine coole Sache bei der Verwendung von Container-Tools wie Podman, Buildah, CRI-O und Skopeo ist, dass sie auf derselben Bibliothek zum Ziehen und Verschieben von Bildern basieren, nämlich Container/Image. Ich beschreibe oft die containers/image Projekt als Bibliothek zum Kopieren von Bildern zwischen verschiedenen Arten von Containerspeichern. Dieser Speicher kann sich in einer Containerregistrierung, in Containern/Speicher, als Dateisystemobjekte wie Verzeichnisse oder Tarballs und sogar direkt im Docker-Daemon befinden. Der Mechanismus zum Verschieben dieser Container-Images zwischen den verschiedenen Containerspeichertypen wird als Transport bezeichnet . Eine der am wenigsten verstandenen Funktionen von containers/image sind die verschiedenen Transporte, die es unterstützt.

Transporte

Das Bild wird mit einem transport:ImageName angegeben Format. Wenn kein Transport angegeben ist, wird der docker (Container Registry)-Transport wird standardmäßig in allen Tools außer Skopeo verwendet. Skopeo verlangt, dass Benutzer immer den Transport einstellen.

Eines der coolen Dinge, die Docker getan hat, war die Idee einer Containerregistrierung , bei dem es sich im Grunde um einen Webserver handelt, der Container-Images enthält. Docker.io, quay.io und Artifactory sind Beispiele für Containerregistrierungen. Das Docker-Engineering-Team definierte ein Protokoll zum Abrufen und Übertragen dieser Images aus den Containerregistrierungen, das wir als docker bezeichnen Transport.

[Das könnte Ihnen auch gefallen: 12 Podman-Leitfäden für die ersten Schritte mit Containern]

docker://docker-referenz

Eine Image-Referenz wird in einer Remote-Container-Image-Registrierung gespeichert. Beispiel:quay.io/podman/stable:latest . Die Referenz kann einen Hostnamen für eine bestimmte Registrierung enthalten.

$ skopeo copy docker://docker.io/alpine dir:/tmp/alpine
$ podman run docker://registry.fedoraproject.org/fedora:latest echo hello

Für Podman und Buildah, docker:// ist der Standardtransport. Es kann der Einfachheit halber weggelassen werden:

$ podman pull registry.fedoraproject.org/fedora:latest

Bei Verwendung eines Kurznamens zum Ziehen eines Bildes wie fedora , Podman und Buildah verwenden die Liste der Registrierungen, um eine Docker-Referenz zu erstellen, und rufen sie dann mit docker:// auf Transport.

Containers/image unterstützt auch viele andere Transporte zum Kopieren und Speichern von Container-Images.

oci:Pfad

Der oci transport exportiert/importiert den Inhalt eines Container-Images in ein lokales Verzeichnis, vorausgesetzt, das Image entspricht der Open Container Image Layout Specification. Die Manifest- und Layer-Tarballs werden als einzelne Dateien in das Verzeichnis exportiert.

$ skopeo copy oci:/tmp/myimage docker://registry.example.com/myimage
$ podman run oci:/tmp/fedora echo hello

Verzeichnis

Das dir transport speichert den Inhalt eines Container-Images in einem lokalen Verzeichnis, wobei wiederum davon ausgegangen wird, dass das Image mit dem Docker-Image-Layout kompatibel ist. Das Manifest, Layer-Tarballs und Signaturen werden als einzelne Dateien in das Verzeichnis exportiert. Dies ist ein nicht standardisiertes Format, das hauptsächlich zum Debuggen oder zur nichtinvasiven Containerinspektion nützlich ist. Es ist dem oci sehr ähnlich transport speichert die Dateien jedoch im alten Docker-Format.

$ podman save --format docker-dir fedora -o /tmp/fedora
$ podman run dir:/tmp/fedora echo hello

Docker-Archiv

Eine andere Möglichkeit, die die Docker-Ingenieure zum Speichern und Transportieren von Container-Images entwickelt haben, ist die Verwendung von tar . Ein Tarball enthält alle Dateien, aus denen ein Container-Image besteht. Diese Tarballs wurden ursprünglich mit docker save erstellt und podman save Befehle. Sie könnten mit docker load wieder in den lokalen Speicher der Container-Engine geladen werden und podman load . Der containers/image Die Bibliothek macht dieses Archivformat zu einem Transport, wodurch es direkt von anderen Befehlen wie podman run dir:/tmp/fedora.tag echo hello verwendet werden kann , oder buildah from dir:/tmp/fedora.tar

$ skopeo copy docker://registry.fedoraproject.org/fedora:latest docker-archive:/tmp/fedora.img
$ podman run docker-archive:/tmp/fedora.img echo hello

Warnung :Verwendung von docker-archive ist fast nie das Richtige. Das Format ist sowohl für die Speicherung als auch für die E/A sehr verschwenderisch. Ich würde empfehlen, dass Benutzer eine temporäre docker/distribution ausführen Registrierung statt.

oci-archiv

Dieses Format ähnelt dem docker-archive , aber anstatt das Legacy-Format zu sein, speichert es ein einzelnes Bild im OCI-Format. Der Pfad ist ein Bild, das der Open Container Image Layout Specification entspricht und sich in einem Verzeichnis am angegebenen Pfad befindet und mit einem Tag gekennzeichnet ist.

$ skopeo copy docker-archive:/tmp/fedora.img oci-archive:/tmp/fedora-oci.img
$ podman run oci-archive:/tmp/fedora-oci.img echo hello

Docker-Daemon

Eines der coolsten Features von containers/image ist Unterstützung für den docker-daemon Transport. Docker und Podman teilen sich nicht denselben Speicher. Sie können dies nicht, da Docker die Sperrung seines Speichers innerhalb des Daemons steuert. Während Podman, Buildah, CRI-O und Skopeo Inhalte teilen können, verwenden sie das Dateisystem über containers/storage .

Podman und die anderen Tools können mit dem docker-daemon arbeiten Speicherung indirekt über den docker-daemon Transport. Dadurch können die Container-Engines direkt auf Bilder zugreifen, die zuvor vom Docker-Daemon abgerufen wurden, oder auf Bilder, die von docker build erstellt wurden . Sie können auch von Buildah und Podman erstellte Images direkt in den Docker-Daemon verschieben.

Etwa so:

podman run docker-daemon:alpine echo hello

Hinweis :Podman zieht das Image aus dem Docker-Daemon und speichert das Image in containers/storage , und führen Sie dann den Container aus. Es verwendet den Docker-Speicher nicht direkt. Damit Podman mit Docker kommunizieren kann, müssen wir es als Root ausführen, da der Docker-Daemon Root-Rechte benötigt.

$ sudo docker pull fedora
$ sudo podman run docker-daemon:docker.io/library/fedora echo hello

Wenn Sie ein Image über buildah erstellen , können Sie das Image direkt in den docker-daemon übertragen :

# ctr=$(buildah from fedora)
# mnt=$(buildah mount $ctr)
# install -m 0744 start.sh $/mnt
# buildah commit $ctr docker-damon:myimage

Hinweis :Obwohl es cool ist, den docker-daemon zu verwenden Bei einem solchen Transport ist dies ein letzter Ausweg mit sehr hohen E/A- und Speicherkosten. Konsolidierung des Prozesses zur Ausführung in dem einen oder anderen storage/ecosystem ist fast immer besser. Zum Beispiel wäre es besser, das Image aus dem Docker-Daemon zu ziehen und dann einfach containers/storage zu verwenden für die Ausführung.

$ sudo podman pull docker-daemon:registry.fedoraproject.org/library/fedora
$ podman run fedora echo hello

Container-Lagerung

Der abschließende "Transport" ist wirklich überhaupt kein Transport, sondern eher ein Mechanismus zum Speichern eines Bildes in einem lokalen Speicher, der mit containers/storage erstellt wurde Bücherei. Das Format von docker-reference wird ausführlich im Docker-Transport beschrieben.

$ skopeo copy docker://registry.access.redhat.com/ubi8:latest containers-storage:ubi8:latest

Buildah und Podman speichern ihre Bilder standardmäßig im Containerspeicher:

$ podman image pull ubi8

Der obige Podman-Befehl erweitert Kurznamen für ubi8 zu registry.access.redhat.com/ubi8:latest und verwendet dann den docker:// transport um es von registry.access.redhat.com zu ziehen . Anschließend speichert es den Inhalt direkt in containers/storage .

$ buildah push docker://quay.io/myrepo/myimage

Der obige Buildah-Befehl schaut in den Containerspeicher und pusht dann das Bild mit docker:// Transport zur quay.io-Registrierung.

[ Erste Schritte mit Containern? Schauen Sie sich diesen kostenlosen Kurs an. Containerisierte Anwendungen bereitstellen:Eine technische Übersicht. ]

Schlussfolgerung

Die containers/image Die Bibliothek bietet eine hervorragende Möglichkeit, Container-Images zwischen Computern und verschiedenen Speicherarten zu übertragen. Es ist ein integraler Bestandteil der Container-Engines und bietet einige wirklich coole Funktionen. Bitte vertiefen Sie sich mit Hilfe der Manpage container-transports genauer in die Transporte.


Linux
  1. So erstellen, listen und löschen Sie Docker-Container unter Linux

  2. So erstellen Sie ein benutzerdefiniertes Image aus einem Docker-Container

  3. Kann Docker in einem Linux-Container ausgeführt werden?

  4. Was befindet sich in einem Docker-Image/Container?

  5. Wie können Sie Debugging-Symbole im Linux-Perf-Tool in Docker-Containern zum Laufen bringen?

Docker-Image vs. Container:Die Hauptunterschiede

Einführung in die Verwaltung von Linux-Containern

So installieren Sie das AlmaLinux 8-Image im Docker-Container

So führen Sie Docker-Container aus

Aktualisieren von Docker-Containern ohne oder mit minimaler Ausfallzeit

So verwalten Sie Docker-Container