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

So ändern Sie die CentOS-Serverzeit auf die Peking-Zeit

1. Ich habe ein VPS- und CentOS-System gekauft un...

Gemeinsame MySQL-Sicherungsbefehle und Shell-Sicherungsskripte

Um mehrere Datenbanken zu sichern, können Sie den...

Detaillierte Erklärung des einfachen Stores von Vue

Die einfachste Store-Anwendung in Vue ist die glo...

Zusammenfassung der Wissenspunkte zum Abdecken von Indizes in MySQL

Wenn ein Index die Werte aller abzufragenden Feld...

Wie wirkt sich der zusammengesetzte Index von MySQL aus?

Inhaltsverzeichnis Hintergrund Zusammengesetzte I...

vue verwendet Ele.me UI, um die Filterfunktion von Teambition zu imitieren

Inhaltsverzeichnis Problembeschreibung Die allgem...

Tiefgreifendes Verständnis der MySQL-Selbstverbindung und Join-Assoziation

1. MySQL-Selbstverbindung MySQL muss beim Abfrage...

Docker-Installation Tomcat Dubbo-Admin-Instanz-Kenntnisse

1. Laden Sie das Tomcat-Image herunter Docker zie...

MySQL 5.7.18 Green Edition Download- und Installations-Tutorial

Dieser Artikel beschreibt den detaillierten Vorga...

Wie viele Daten können in einer MySQL-Tabelle gespeichert werden?

Programmierer müssen sich viel mit MySQL befassen...

Anwendungsbeispiel-Tutorial zum Schlüssel-Rendering in Vue

Einführung Während des Front-End-Projektentwicklu...