Wie veröffentliche ich für verschiedene Architekturen erstellte Docker-Images in Docker HUB?

Wie veröffentliche ich für verschiedene Architekturen erstellte Docker-Images in Docker HUB?

Ich habe einen Container, der aufgebaut ist aufdebian:jessie(es gibt einige OpenSSL-Kompilierungen und einige benutzerdefinierte Sachen). Ich möchte, dass mein Bildstartfähigauf verschiedenen Architekturen, beispielsweise auf „normalen“ x86_64-Betriebssystemen, aber auch auf ARM-basierten Architekturen wie RaspberryPI.

Ich habe festgestellt, dass das Image, wenn ich es auf x86_64 erstelle und auf HUB veröffentliche, nicht funktioniert, wenn es auf ein ARM-Gerät gezogen wird und umgekehrt. Der Versuch, dies zu tun, führt zu Fehlern wie „Einige Bibliotheken können nicht gefunden werden“ oder „Unerkannte Befehle“.

Die Frage ist: Wie erstelle und veröffentliche ich mein Image, sodass es für andere Architekturen verfügbar ist (und, was wichtig ist – wie weise ich Docker an, beim Herunterladen automatisch das Richtige auszuwählen)?

Ich kann sehen, dassdie Debian-Container wurden auf verschiedene Architekturen „portiert“aber ich kann keine Informationen finden, wie ich dies für mein Bild erreichen kann.

Antwort1

Multi-Arch-Images in Docker werden derzeit aktiv entwickelt. Das Kernstück davon ist eine docker manifestCLI, diewird in dieser PR noch entwickelt.

Sie müssen zunächst Ihre Images für verschiedene Architekturen erstellen, die Sie dann immer direkt auf dem entsprechenden Architektursystem ausführen können. Ein Multi-Arch-Image ist eine „Manifestliste“, die auf diese Images verweist. Der Docker-Client zieht dann das entsprechende Image aus dieser Liste, wenn Sie das Multi-Arch-Image ziehen.

Bis der obige PR in Docker integriert ist, können Sie denManifest-WerkzeugDamit können Sie die Manifestliste definieren und sie auf den Registrierungsserver hochladen. Dies ermöglicht eine YAML-Eingabedatei wie im folgenden Beispiel:

image: myprivreg:5000/someimage:latest
manifests:
  -
    image: myprivreg:5000/someimage:ppc64le
    platform:
      architecture: ppc64le
      os: linux
  -
    image: myprivreg:5000/someimage:amd64
    platform:
      architecture: amd64
      features:
        - sse
      os: linux

Anschließend führen Sie Folgendes aus, um die obige YAML-Datei in eine Manifestliste umzuwandeln, die in das definierte Register übertragen wird:

./manifest-tool push from-spec someimage.yaml

Antwort2

  1. Bauen Sie Ihr Image anhand des Images der entsprechenden Architektur auf.
    • zB: arm32v7/debian:jessiestattdebian:jessie
  2. Kennzeichnen Sie es als etwas anderes.
    • z.B: fracz/fooapp:arm32-latest, fracz/fooapp:raspi-latest,fracz/fooapp:grandma-use-this-one
  3. Für die Auswahl des passenden Tags ist derjenige verantwortlich, der Ihr Bild veröffentlichen möchte.
    • Allerdings möchten Sie wahrscheinlich einige relevante Informationen in Ihre Dokumente/Readmes/usw. aufnehmen.

verwandte Informationen