Implementierungsideen für die Synchronisierung von Docker-Registry-Images

Implementierungsideen für die Synchronisierung von Docker-Registry-Images

Einleitung

Bisher wurden unsere Docker-Images in der Container Registry von Azure gespeichert. Vor Kurzem haben wir unsere eigene Docker-Registry erstellt. Wir möchten die zuvor in der Container Registry von Azure gespeicherten Docker-Images mit unserer eigenen Docker-Registry synchronisieren.

Umsetzungsideen

Unsere Methode ist relativ einfach und unkompliziert, kann die Anforderungen aber grundsätzlich erfüllen.

Unser Ansatz ist

  • Holen Sie sich zunächst die Liste aller Bilder in der Quellregistrierung
  • Holen Sie sich dann nacheinander die Bild-Tags
  • Anschließend durchlaufen und ziehen Sie die entsprechenden Images auf den lokalen Computer, versehen sie mit einem Docker-Tag und benennen sie mit dem neuen Registry-Image-Namen
  • Pushen Sie dann das Docker-Image in die neue Registrierung
  • Löschen Sie das auf den lokalen Computer heruntergeladene Image und das in die neue Registrierung übertragene Image

Später fiel mir plötzlich ein, dass Alibaba Cloud anscheinend ein Tool zur Bildsynchronisierung hat: https://github.com/AliyunContainerService/image-syncer image-syncer ist ein Docker-Tool zur Bildsynchronisierung, das für die Synchronisierung vieler Bildrepositorys verwendet werden kann. Es unterstützt die meisten der derzeit gängigen Docker-Imagerepository-Dienste. Die Einführung ist großartig. Wenn Sie Bilder zwischen Registern synchronisieren müssen, können Sie dieses Tool ausprobieren. Laut der Einführung zieht dieses Tool nicht auf die lokale Festplatte. Nachdem die Bilddaten aus dem Quellregister abgerufen wurden, werden sie direkt in das neue Register übertragen, was viel effizienter ist.

Docker-Registry API

Das Docker-Register verfügt über eine Reihe von Spezifikationen. Weitere Informationen finden Sie unter https://docs.docker.com/registry/spec/api/.

Alle Bilder abrufen

Docker Registry v2 fügt eine neue _catalog API hinzu, um alle Bilder abzurufen. v1 kann durch _search ersetzt werden.

Die Syntax lautet wie folgt:

GET /v2/_catalog

Standardmäßig werden maximal 100 Datensätze zurückgegeben. Wenn die Anzahl der Datensätze größer als 100 ist, können Sie die Anzahl der zurückzugebenden Datensätze mit dem Parameter n angeben. Wenn Sie Paginierung verwenden möchten, können Sie einen weiteren Parameter last angeben, um das letzte Bild anzugeben, das nach der vorherigen Seite zurückgegeben werden soll. Beispiel: http://example.com/v2/_catalog?n=20&last=b

Holen Sie sich das Bild-Tag

Um die Tag-Liste des Docker-Images abzurufen, können Sie GET /v2/<repository-name>/tags/list verwenden. Sie können sie auch seitenweise anzeigen, ähnlich wie beim Abrufen der Image-Liste oben. Sie können n und last verwenden, um seitenweises Laden zu erreichen.

Betriebsbeispiel

Zur Demonstration wird lokal ein Test-Docker-Register bereitgestellt. Ich verwende httpie zum Testen.

Holen Sie sich die Spiegelliste:

Rufen Sie die Schnittstelle _catalog auf, um die Bilderliste abzurufen

http://5000/v2/_catalog

Holen Sie sich die Tag-Liste des Bildes

Rufen Sie tags/list -Schnittstelle auf, um das Bild-Tag zu erhalten

http://5000/v2/busybox/tags/list
http:5000/v2/redis/tags/list

PowerShell-Skript

Jeder nicht automatisierte Betrieb und jede Wartung ist ein Hooligan. Es ist sehr wahrscheinlich, dass es in Zukunft ähnliche Anforderungen geben wird. Es ist besser, ein Skript zu schreiben, um es automatisch auszuführen.

Das folgende Skript ist etwas vereinfacht, da sich in unserem Azure-Containerregister nicht viele Bilder befinden, nur etwa 50 oder 60 Bilder, und das Bild nur das neueste Tag und keine anderen Tags hat. Daher sind die obigen Schritte vereinfacht und es werden nicht alle Bilder durch Paging abgerufen, noch werden alle Tags abgerufen. Wenn Sie es tatsächlich verwenden, ändern Sie es bitte selbst, bevor Sie es verwenden

# Variablen
$srcRegUser = "xxx"
$srcRegPwd = "111111"
$srcRegHost = "xxx.azurecr.cn"
$destRegUser = "yyy"
$destRegPwd = "222"
$destRegHost = "registry.xxx.com"

# Repositories aus der Quellregistrierung abrufen
# httpie
$response = (http -b -a "${srcRegUser}:${srcRegPwd}" "https://${srcRegHost}/v2/_catalog") | ConvertFrom-Json
# Locke
#$response = (curl -u "${srcRegUser}:${srcRegPwd}" "https://${srcRegHost}/v2/_catalog") | ConvertFrom-Json
# Repository
$repositories = $response.repositories

#
Schreib-Host $repositories

# Login-Quellregistrierung
Docker-Anmeldung $srcRegHost -u $srcRegUser -p $srcRegPwd
# Login Zielregistrierung
Docker-Anmeldung $destRegHost -u $destRegUser -p $destRegPwd

# synchronisieren
foreach($repo in $repositories)
{
  Write-Host "sync $repo begin"

  $srcTag = "${srcRegHost}/${repo}:latest"
  $destTag = "${destRegHost}/${repo}:latest"

  Write-Host "Quellbild-Tag: $srcTag"
  Write-Host "Ziel-Image-Tag $destTag"

  Write-Host "docker pull $srcTag begin"

  docker pull $srcTag

  Write-Host „Docker Pull $srcTag abgeschlossen“

  Write-Host "Docker-Tag $srcTag $destTag ing"

  Docker-Tag $srcTag $destTag

  Write-Host "docker push $destTag begin"

  docker push $destTag

  Write-Host "Docker Push $destTag abgeschlossen"
  
  Write-Host "docker rmi $srcTag $destTag begin"

  docker rmi $srcTag $destTag

  Write-Host "docker rmi $srcTag $destTag end"

  Write-Host „Synchronisierung von $repo abgeschlossen“
}

Write-Host „Abgeschlossen …“

Mehr

Wenn Sie viele Bilder synchronisieren müssen, können Sie zum Synchronisieren das Bildsynchronisierungstool von Alibaba Cloud verwenden.

Referenz

https://stackoverflow.com/questions/31251356/how-to-get-a-list-of-images-on-docker-registry-v2

https://github.com/AliyunContainerService/image-syncer

https://docs.docker.com/registry/spec/api/

Zusammenfassen

Dies ist das Ende dieses Artikels über die Synchronisierung von Docker-Registrierungsabbildern. Weitere verwandte Inhalte zu Docker-Registrierungsabbildern finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So implementieren Sie Docker Registry zum Erstellen eines privaten Image Warehouse
  • So fragen Sie Bilder in einem privaten Register ab oder erhalten sie
  • Detaillierte Erläuterung der Konfigurationsänderung für das Ziehen von inländischen Docker-Images und die Image-Beschleunigung für Registry-Mirrors
  • So erstellen Sie ein privates Repository mit einem Docker-Registrierungsimage
  • Detaillierte Erläuterung zum Löschen und zur Speicherbereinigung von Docker-Registrierungsabbildern

<<:  Verstehen Sie kurz die MySQL-Datenbankoptimierungsphase

>>:  Eine vollständige Anleitung zu CSS-Stilattributen css() und width() in jQuery

Artikel empfehlen

Schreiben Sie einen formellen Blog mit XHTML CSS

Der vollständige Name von Blog sollte Weblog sein...

Wie wird eine SQL-Anweisung in MySQL ausgeführt?

Inhaltsverzeichnis 1. Analyse der MySQL-Architekt...

Detaillierte Beispiele für Linux-Festplattengeräte- und LVM-Verwaltungsbefehle

Vorwort Im Linux-Betriebssystem sind Gerätedateie...

Wie funktionieren die dynamischen Komponenten von Vue3?

Inhaltsverzeichnis 1. Komponentenregistrierung 1....

Vue implementiert die Frage-Antwort-Funktion

1. Schnittstelle für die Anforderung einer Antwor...

So verschieben Sie den Datenspeicherort von mysql5.7.19 in Centos7

Szenario: Mit zunehmender Datenmenge ist die Fest...

Details zum Like-Operator in MySQL

1. Einleitung Beim Filtern unbekannter oder teilw...

So lösen Sie das Zeichensatzproblem bei der Anmeldung bei Linux

Zeichensatzfehler treten immer auf Gebietsschema:...

So implementieren Sie ein responsives Layout mit CSS

Implementieren eines responsiven Layouts mit CSS ...

Javascript um den Drag-Effekt der Login-Box zu erreichen

In diesem Artikel wird der spezifische Code von J...

Vue und React im Detail

Inhaltsverzeichnis 1. Panorama II. Hintergrund 1....