Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker manifest push effektiv nutzen können, um Multi-Architektur-Images zu verwalten. Wir beginnen damit, eine Manifestliste zu erstellen, die es ermöglicht, dass ein einzelner Imagename auf Images verweist, die für verschiedene Architekturen und Betriebssysteme gebaut wurden.

Nachdem die Manifestliste erstellt wurde, üben Sie, sie an eine Standard-Registrierung (Registry) zu pushen und erkunden auch, wie Sie an eine unsichere Registrierung pushen können. Abschließend lernen Sie, wie Sie die lokale Manifestliste pushen und dann löschen, um eine effiziente Verwaltung Ihrer Docker-Images sicherzustellen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") subgraph Lab Skills docker/run -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/stop -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/rm -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/inspect -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/pull -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/tag -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/push -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} docker/login -.-> lab-555171{{"Wie man den docker manifest push-Befehl verwendet, um eine Manifestliste zu pushen"}} end

Erstellen einer Manifestliste

In diesem Schritt lernen wir, wie man eine Manifestliste mit dem Befehl docker manifest create erstellt. Eine Manifestliste ist eine Liste von Image-Manifesten, die es Ihnen ermöglicht, einen einzelnen Namen zu verwenden, um auf Images für verschiedene Architekturen und Betriebssysteme zu verweisen. Dies ist besonders nützlich für das Erstellen von Multi-Architektur-Images.

Zunächst ziehen (pull) wir zwei verschiedene Images, die wir zur Erstellung unserer Manifestliste verwenden werden. Wir verwenden das alpine-Image für die amd64- und arm64-Architekturen.

docker pull alpine:latest
docker pull arm64v8/alpine:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass die Images heruntergeladen werden.

latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
latest: Pulling from arm64v8/alpine
...
Status: Downloaded newer image for arm64v8/alpine:latest

Jetzt erstellen wir eine Manifestliste namens my-alpine:latest, die die beiden Images enthält, die wir gerade heruntergeladen haben. Die Syntax lautet docker manifest create MANIFEST_LIST IMAGE [IMAGE...].

docker manifest create my-alpine:latest alpine:latest arm64v8/alpine:latest

Wenn der Befehl erfolgreich ist, sehen Sie keine Ausgabe. Dieser Befehl erstellt eine lokale Manifestliste. Um die Informationen der Manifestliste anzuzeigen, können Sie den Befehl docker manifest inspect verwenden.

docker manifest inspect my-alpine:latest

Sie sollten eine Ausgabe ähnlich dieser sehen, die die Details der Manifestliste zeigt, einschließlich der Manifeste für die amd64- und arm64-Architekturen.

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
  "manifests": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "size": 528,
      "digest": "sha256:...",
      "platform": {
        "architecture": "amd64",
        "os": "linux"
      }
    },
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "size": 528,
      "digest": "sha256:...",
      "platform": {
        "architecture": "arm64",
        "os": "linux"
      }
    }
  ]
}

Dies bestätigt, dass die Manifestliste my-alpine:latest erfolgreich erstellt wurde und die angegebenen Images enthält.

Pushen der Manifestliste an eine Registrierung (Registry)

In diesem Schritt pushen wir die Manifestliste, die wir im vorherigen Schritt erstellt haben, an eine Docker-Registrierung. Standardmäßig pusht docker push einzelne Images. Um eine Manifestliste zu pushen, müssen Sie den Befehl docker manifest push verwenden.

Bevor wir pushen, benötigen wir eine Registrierung, an die wir pushen können. Für dieses Lab verwenden wir Docker Hub. Wenn Sie kein Docker Hub-Konto haben, können Sie sich kostenlos ein Konto erstellen. Sie müssen sich über Ihr Terminal bei Docker Hub anmelden.

docker login

Sie werden aufgefordert, Ihren Docker Hub-Benutzernamen und Ihr Passwort einzugeben. Geben Sie Ihre Anmeldeinformationen ein, um sich anzumelden.

Login with your Docker ID to push and pull images, scan them for vulnerabilities, sign and attest to them, and more.
Username: your_docker_username
Password: your_docker_password
Login Succeeded

Nachdem Sie sich angemeldet haben, können Sie die Manifestliste pushen. Das Format für das Pushen an Docker Hub lautet your_docker_username/manifest_list_name:tag. Nehmen wir an, Ihr Docker Hub-Benutzername ist your_docker_username. Ersetzen Sie your_docker_username durch Ihren tatsächlichen Docker Hub-Benutzernamen.

docker manifest push your_docker_username/my-alpine:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass die Manifestliste und die zugehörigen Images an die Registrierung gepusht werden.

Pushed manifest list your_docker_username/my-alpine:latest

Nachdem das Pushen abgeschlossen ist, können Sie überprüfen, ob die Manifestliste in Ihrem Docker Hub-Repository vorhanden ist, indem Sie die Docker Hub-Website besuchen oder das Image auf einer anderen Architektur herunterladen.

Pushen der Manifestliste an eine unsichere Registrierung (Registry)

In diesem Schritt werden wir untersuchen, wie man eine Manifestliste an eine unsichere Registrierung pusht. Eine unsichere Registrierung ist eine Registrierung, die keine TLS/SSL-Zertifikate verwendet. Dies wird für Produktionsumgebungen nicht empfohlen, kann aber für Tests oder interne Netzwerke nützlich sein.

Standardmäßig erfordert Docker sichere Verbindungen zu Registrierungen. Um an eine unsichere Registrierung zu pushen, müssen Sie den Docker-Daemon so konfigurieren, dass er unsichere Verbindungen zu dieser bestimmten Registrierungsadresse zulässt.

Für dieses Lab werden wir eine unsichere Registrierung simulieren, indem wir eine lokale Registrierung ohne TLS ausführen. Zunächst starten wir einen lokalen Registrierungscontainer. Wir leiten Port 5000 auf dem Host auf Port 5000 im Container weiter.

docker run -d -p 5000:5000 --name registry registry:2

Sie sollten eine Ausgabe ähnlich dieser sehen, die anzeigt, dass der Container läuft:

Unable to find image 'registry:2' locally
2: Pulling from library/registry
...
Status: Downloaded newer image for registry:2
a1b2c3d4e5f6...

Jetzt müssen wir den Docker-Daemon so konfigurieren, dass er diese unsichere Registrierung unter localhost:5000 vertraut. Dazu müssen Sie die Docker-Daemon-Konfigurationsdatei ändern. Der Speicherort dieser Datei kann variieren, aber auf den meisten Linux-Systemen ist es /etc/docker/daemon.json.

Wir verwenden sudo nano, um diese Datei zu bearbeiten.

sudo nano /etc/docker/daemon.json

Wenn die Datei nicht existiert, können Sie sie erstellen. Fügen Sie den Schlüssel insecure-registries hinzu oder ändern Sie ihn, um localhost:5000 einzuschließen. Der Dateiinhalt sollte wie folgt aussehen:

{
  "insecure-registries": ["localhost:5000"]
}

Speichern Sie die Datei und verlassen Sie den Editor (Ctrl+X, Y, Enter in nano).

Nachdem Sie die Konfiguration geändert haben, müssen Sie den Docker-Daemon neu starten, damit die Änderungen wirksam werden.

sudo systemctl restart docker

Jetzt können Sie die Manifestliste mit der Adresse der unsicheren Registrierung taggen und pushen. Wir verwenden die im ersten Schritt erstellte Manifestliste my-alpine:latest.

docker manifest create localhost:5000/my-alpine:latest alpine:latest arm64v8/alpine:latest
docker manifest push localhost:5000/my-alpine:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Pushen erfolgreich war, auch wenn die Registrierung unsicher ist.

Pushed manifest list localhost:5000/my-alpine:latest

Dies zeigt, wie man eine Manifestliste an eine unsichere Registrierung pusht, nachdem der Docker-Daemon konfiguriert wurde.

Pushen und Löschen der lokalen Manifestliste

In diesem Schritt lernen wir, wie man eine Manifestliste pusht und die lokale Kopie automatisch nach einem erfolgreichen Push entfernt. Dies kann nützlich sein, um Ihre lokale Umgebung nach dem Pushen von Multi-Architektur-Images aufzuräumen.

Der Befehl docker manifest push hat eine --purge-Option, die die lokale Manifestliste entfernt, nachdem sie erfolgreich an die Registrierung gepusht wurde.

Zunächst stellen wir sicher, dass wir die Manifestliste my-alpine:latest lokal haben. Wir haben diese im ersten Schritt erstellt. Sie können sie überprüfen, um ihre Existenz zu bestätigen.

docker manifest inspect my-alpine:latest

Sie sollten wie zuvor die Details der Manifestliste sehen.

Jetzt pushen wir diese Manifestliste erneut an Docker Hub, aber diesmal verwenden wir die --purge-Option. Denken Sie daran, your_docker_username durch Ihren tatsächlichen Docker Hub-Benutzernamen zu ersetzen.

docker manifest push --purge your_docker_username/my-alpine:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Pushen im Gange ist, und dann eine Nachricht, die bestätigt, dass die Manifestliste gelöscht wurde.

Pushed manifest list your_docker_username/my-alpine:latest
Purged manifest list your_docker_username/my-alpine:latest

Nachdem der Befehl abgeschlossen ist, sollte die lokale Manifestliste my-alpine:latest nicht mehr existieren. Sie können dies überprüfen, indem Sie versuchen, sie erneut zu überprüfen.

docker manifest inspect my-alpine:latest

Diesmal sollten Sie eine Fehlermeldung sehen, die anzeigt, dass die Manifestliste nicht gefunden wurde.

no such manifest: my-alpine:latest

Dies bestätigt, dass die --purge-Option die lokale Manifestliste erfolgreich entfernt hat, nachdem sie an die Registrierung gepusht wurde.

Schließlich räumen wir den lokalen unsicheren Registrierungscontainer auf, den wir im vorherigen Schritt gestartet haben.

docker stop registry
docker rm registry

Sie sollten eine Ausgabe sehen, die bestätigt, dass der Container gestoppt und entfernt wurde.

registry
registry

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Befehl docker manifest verwendet, um Multi-Architektur-Images zu verwalten. Wir haben begonnen, indem wir zwei verschiedene Architekturversionen des alpine-Images gezogen haben. Dann haben wir docker manifest create verwendet, um diese Images zu einer einzigen Manifestliste zusammenzufassen, sodass wir sie mit einem einzigen Namen ansprechen können. Wir haben die Erstellung der Manifestliste mit docker manifest inspect überprüft.

Anschließend haben wir untersucht, wie man diese Manifestliste mit docker manifest push an eine Docker-Registrierung (Registry) pusht. Wir haben auch den speziellen Fall des Pushens an eine unsichere Registrierung behandelt, indem wir die --insecure-Option hinzugefügt haben. Schließlich haben wir gelernt, wie man die Manifestliste pusht und gleichzeitig die lokale Kopie entfernt, indem wir die --purge-Option mit dem Befehl docker manifest push verwenden.