So verwenden Sie Docker buildx, um plattformübergreifende Images zu erstellen und sie in private Repositories zu übertragen

So verwenden Sie Docker buildx, um plattformübergreifende Images zu erstellen und sie in private Repositories zu übertragen

Einführung

Kürzlich habe ich herausgefunden, dass es eine ARM-Version von Docker gibt. Auf hub.docker.com gibt es auch ARM-Versionsimages, aber das Erstellen der ARM-Version des Docker-Images ist ein Problem. Eingebettete Programme können auf einem PC plattformübergreifend kompiliert werden, aber ich weiß nicht, ob Docker eine plattformübergreifende Lösung hat.

planen

Uns fallen mehrere Möglichkeiten zum Erstellen von ARM-Images mit Docker ein. Die dritte ähnelt der Cross-Kompilierung.

  1. Verwenden Sie einen ARM-Host und installieren Sie die ARM-Version von Docker. Das von Docker erstellte Image ist die ARM-Version.
  2. Verwenden Sie Linux-Virtualisierungssoftware wie beispielsweise qemu, um ARM-Chip + Linux zu simulieren.
  3. Mit der experimentellen Docker-Funktion „Buildx“ können Sie Images für mehrere Plattformen erstellen.

Erstellen Sie mehrere Plattform-Images mit Docker Buildx

Siehe die folgenden Links.
https://docs.docker.com/engine/reference/commandline/manifest/
https://docs.docker.com/buildx/working-with-buildx/
https://engineering.docker.com/2019/06/getting-started-with-docker-for-arm-on-linux/

Es werden zwei experimentelle Funktionen von Docker verwendet, und Sie müssen die experimentellen Funktionen aktivieren, wenn Sie sie verwenden.

Docker-Manifest. Manifest ist eine Datei, die Bildinformationen enthält. Eine Manifestliste ist eine Bildliste, die zum Speichern von Bildinformationen verschiedener Betriebssysteme/Architekturen verwendet wird. Wir können eine Manifestliste erstellen, die auf die beiden Bilder verweist und dann mehrere Plattformen unterstützt.

Docker Buildx, Buildx ist ein Plug-In für Docker und die nächste Generation der Docker-Image-Erstellung. Dieses Plug-in übersetzt die Befehlssätze verschiedener Plattformen über qemu-user-static, um Programme anderer Plattformen auf x64 auszuführen. buildx verwendet tatsächlich das Image moby/buildkit:buildx-stable-1 für plattformübergreifende Builds.

Erstellen Sie eine plattformübergreifende Version der Docker-Registrierung

Informationen zum Erstellen des Docker-Registrierungsimages finden Sie unter dem folgenden Link.
https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/deploying-multi-architecture-docker-registry

Erstellen Sie einen DNS-Server, um den Buildx-Fehler zu beheben

Das Buildx-Plugin verwendet nicht die lokale Hosts-Datei und muss DNS verwenden. Dies ist ein Fehler, https://github.com/docker/buildx/issues/218, und niemand in der Community kümmert sich darum.
Lösung: Erstellen Sie Ihren eigenen DNS, richten Sie die Spiegeladresse buildx.com auf die Registrierungsmaschine und verwenden Sie später nginx. Ubuntu verfügt über eine standardmäßige systemd-Auflösung, die deaktiviert und dann auf dnsmasq aktiviert wird.

Verwenden des Nginx-Proxys zum Lösen von Namensproblemen

Nginx-Proxy hinzugefügt, um sowohl HTTP als auch HTTPS zu unterstützen. Das Buildx-Plugin erzwang die Verwendung von HTTPS und es gab keine Möglichkeit, es abzuschalten.
Es wird ein Zertifikatsproblem angezeigt. Das Zertifikat ist nicht für diesen Domänennamen. Die Lösung lautet: Generieren Sie ein neues Zertifikat und geben Sie Ihren eigenen Domänennamen ein.
Zertifikatsproblem. Vertrauen Sie dem selbstsignierten Zertifikat nicht. Fügen Sie das selbstsignierte Zertifikat zur Zertifikatsvertrauenskette des Buildx-Daemon-Containers hinzu. https://github.com/docker/buildx/issues/80#issuecomment-533844117

Nginx fügt zwei Konfigurationen hinzu, um mehrere Probleme beim Pushen durch den Client zu lösen.

# nignx.conf-Konfiguration proxy_ignore_client_abort on; # Client-Warnung ignorieren client_max_body_size 0; # Unbegrenzte Upload-Dateigröße # Konfiguration des virtuellen Hosts Server {
  hören Sie 443;
  Servername buildx.com;
  SSL aktiviert;
  SSL-Zertifikat crt/server.crt;
  SSL-Zertifikatsschlüssel crt/server.key;
  SSL-Sitzungszeitüberschreitung 5 Min.
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #Konfigurieren Sie gemäß diesem Protokoll ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #Konfigurieren Sie gemäß dieser Suite ssl_prefer_server_ciphers on;
  Standort / {
    Proxy-Passwort http://192.168.1.11:81;
  }
}

Server {
  hören Sie 80;
  Servername buildx.com;
  Standort / {
    Proxy-Passwort http://192.168.1.11:81;
  }
}

Einrichten einer lokalen Docker-Umgebung

Der lokale Docker muss experimentelle Funktionen aktivieren.

  1. Konfigurieren Sie „experimental“: true in /etc/docker/daemon.json und starten Sie Docker neu. Aktivieren Sie experimentelle Funktionen des Docker-Daemons.
  2. Führen Sie export DOCKER_CLI_EXPERIMENTAL=enabled lokal aus, um die experimentellen Funktionen des Docker-Clients zu aktivieren.
  3. Verwenden Sie die Docker-Version, um zu überprüfen, ob die experimentelle Funktion aktiviert ist.
  4. Führen Sie „docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3“ aus, um die Kernelfunktion „binfmt_misc“ zu aktivieren, sodass Sie Programme auf mehreren Plattformen auf der aktuellen Plattform ausführen können.
  5. Überprüfen Sie, ob Aarch64-Programme unterstützt werden. Katze /proc/sys/fs/binfmt_misc/qemu-aarch64
  6. An diesem Punkt kann der lokale Docker Docker-Container verschiedener Plattformen ausführen. Beispielsweise arm64. Zum Testen können Sie den folgenden Befehl verwenden.
# Ziehen Sie das Image der arm64-Version und führen Sie docker pull --platform arm64 alpine:3.10 aus
docker run --rm -it alpine:3.10 sh

Erstellen Sie ein Basis-Image

Sie können Versionen mehrerer Plattformen von hub.docker.com abrufen, eine Manifestliste generieren und sie in das Register hochladen.

# Arm64-Version abrufen, umbenennen und hochladen. Sie können auf hub.docker.com überprüfen, ob das jeweilige Image mehrere Plattformen unterstützt.
Docker Pull --Plattform arm64 centos:7
Docker-Tag Centos:7 buildx.com/base/centos-arm64:7
Docker-Push buildx.com/base/centos-arm64:7
# amd64-Version ziehen, umbenennen, hochladen docker pull --platform amd64 centos:7
Docker-Tag Centos:7 buildx.com/base/centos-amd64:7
Docker-Push buildx.com/base/centos-amd64:7
# Erstellen Sie eine Manifestliste und laden Sie sie hoch.
Docker-Manifest erstellen --insecure buildx.com/base/centos:7 buildx.com/base/centos-amd64:7 buildx.com/base/centos-arm64:7
Docker-Manifest-Push – unsicher buildx.com/base/centos:7

Bauen Sie ein Geschäftsimage auf

# buildx kann mehrere Plattformen angeben, erfordert aber, dass das FROM-Image in der Docker-Datei eine entsprechende Version haben muss.
# Das von buildx gepackte Image wird nicht lokal gespeichert. Fügen Sie --push hinzu, um das Docker-Repository hochzuladen. Alternativ können Sie --output verwenden, um die Ausgabemethode anzugeben.
docker buildx build --platform linux/amd64,linux/arm64 -t buildx.com/base/java-base:openjdk-8-centos7 . --push

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Verwenden Sie Docker, um ein Git-Image mithilfe des Klon-Repositorys zu erstellen
  • So verwenden Sie ein Domestic Image Warehouse für Docker
  • Jenkins erstellt Docker-Images und überträgt sie in das Harbor-Warehouse.
  • docker-maven-plugin verpackt das Image und lädt es in ein privates Warehouse hoch
  • So verwenden Sie das Docker-Image-Repository
  • Alibaba Cloud-Bereitstellungsschritte für das private Docker-Image-Repository
  • Docker-Container-Praxis-Image-Warehouse

<<:  Optimierungsanalyse der Limit-Abfrage in MySQL-Optimierungstechniken

>>:  Zusammenfassung von 4 Lösungen zum Zurückgeben von Werten auf WeChat Mini-Programmseiten

Artikel empfehlen

CentOS 8.0.1905 installiert ZABBIX Version 4.4 (verifiziert)

Zabbix Server-Umgebungsplattform Version: ZABBIX ...

HTML-Auszeichnungssprache - Referenz

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Klassifizierung der Farbeigenschaften von Webseiten

Klassifizierung der Farbeigenschaften Jede Farbe ...

So verbergen Sie die Versionsnummer und die Cache-Zeit von Webseiten in Nginx

Nginx-Optimierung --- Versionsnummer und Cache-Ze...

So konvertieren Sie zusätzlichen Text in HTML in Auslassungspunkte

Wenn Sie zusätzlichen Text in HTML als Auslassung...

Der eigentliche Prozess der Einbindung von Axios in das Projekt

Inhaltsverzeichnis Vorwort Vorteile der Axios-Kap...

So starten Sie Tomcat mit jsvc (als normaler Benutzer ausführen)

Einführung in jsvc In der Produktion sollte Tomca...

Implementierung der Navigationsleiste und des Dropdown-Menüs in CSS

1. CSS-Navigationsleiste (1) Funktion der Navigat...

MySQL Online-DDL-Tool Gh-Ost-Prinzipanalyse

Inhaltsverzeichnis 1. Einleitung 1.1 Grundsatz 1....

So installieren Sie Redis5.0.3 im Docker

1. Ziehen Sie das offizielle 5.0.3-Image [root@lo...

Vollständiges Beispiel einer Vue-Polling-Request-Lösung

Verständnis von Umfragen Tatsächlich liegt der Sc...