Multiarch Builds mit Docker Buildx
Heutzutage ist es wichtiger denn je, dass Anwendungen auf verschiedenen Architekturen und Plattformen reibungslos funktionieren. Man denke z.B. an den erfolgreichen Schwenk von Apple auf die ARM-Plattform und die Kosteneffizienz, die ARM auch für Cloud-Server on On-Premises-Systeme verspricht. Voraussetzung dafür, dass diese Systeme sich reibungslos in eine IT-Landschaft einfügen, ist allerdings, dass Anwendungen einfach und effizient für mehrere Plattformen bereitgestellt werden können. Hier kommt Docker Buildx ins Spiel, ein leistungsstarkes Tool, das es Entwicklern ermöglicht, Docker-Images für unterschiedliche Architekturen wie ARM, x86-64 und andere direkt aus einer einzigen Quelle zu erstellen. In diesem Blogpost werden wir uns genauer ansehen, wie Multiarch Builds mit Docker Buildx funktionieren und wie Sie diese Technologie effektiv nutzen können.
Was ist Docker Buildx?
Docker Buildx ist eine Erweiterung der Docker CLI, die das Konzept der Moby BuildKit-Technologie nutzt. Es bietet eine fortschrittliche Build-Umgebung mit Unterstützung für Multiarch-Builds. Mit Buildx können Entwickler Docker-Images erstellen, die auf mehreren Architekturen wie AMD64, ARM64, s390x und anderen laufen.
Vorteile von Multiarch Builds
-
Erhöhte Kompatibilität: Ihre Anwendungen können auf einer breiteren Palette von Plattformen und Geräten ausgeführt werden.
-
Vereinfachter Entwicklungsprozess: Sie können Images für verschiedene Architekturen gleichzeitig aus einem einzigen Dockerfile erstellen.
-
Effizienz: Reduzierung der Notwendigkeit, separate Build-Pipelines für jede Architektur zu pflegen.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie die neueste Version von Docker und Docker Buildx installiert haben. Docker Buildx ist in Docker ab Version 19.03 standardmäßig enthalten, aber es kann sein, dass Sie es manuell aktivieren müssen.
Schritt-für-Schritt-Anleitung
-
Aktivieren von Buildx: Überprüfen Sie, ob Buildx in Ihrer Docker-Installation aktiviert ist, indem Sie
docker buildx version
in der Kommandozeile eingeben. Gegebenenfalls müssen Sie die dazu benötigten Pakete installieren. Unter Ubuntu erfolgt dies für Docker CE über den Befehlapt get install docker-buildx-plugin
. -
Erstellen eines neuen Builders: Erstellen Sie einen neuen Builder-Instanz, die Multiarch-Builds unterstützt, mit dem Befehl
docker buildx create --name mybuilder --use
. -
Starten des Builders: Starten Sie den Builder mit
docker buildx inspect --bootstrap
. -
Erstellen eines Multiarch-Images: Erstellen Sie ein Image mit dem Befehl
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t mein-image:tag .
(ersetzen Siemein-image:tag
mit Ihrem eigenen Image-Namen und Tag). Dieser Befehl erstellt Images für AMD64, ARM64 und ARM v7 Architekturen. -
Pushen des Images in eine Registry: Fügen Sie
--push
am Ende des Build-Befehls hinzu, um das Image direkt in eine Docker Registry hochzuladen.
Mögliche Fehler
-
Invalid tag: missing manifest digest: Sollten Sie diesen Fehler nach dem Push von Multiarch Images in die Docker Registry von GitLab sehen, so können Sie ihn durch Ergänzen der Kommandozeilenoption
--provenance=false
vorübergehend umgehen. GitLab arbeitet bereits an der Behebung des Fehlers. -
Fehlender QEMU- bzw. binfmt-Support: Moby BuildKit nutzt für den Support von Multiarch Builds die Virtualisierungssoftware QEMU und den binfmt-Support von Linux. Gegebenenfalls müssen Sie die dazu benötigten Pakete installieren. Unter Ubuntu erfolgt dies über den Befehl
apt get install binfmt-support qemu-user-static
.
Fazit
Multiarch Builds mit Docker Buildx haben die Entwicklung von Multiarch Builds drastisch vereinfacht. Wo früher viele Einzelschritte nötig waren, um Images für die einzelnen Plattformen zu erstellen und diese nachher in einem weiteren Schritt über ein Manifest zusammenzufassen, erledigen Buildx und Moby BuildKit dies nun in einem einzelnen, einfach anzwendenen Schritt. Richtig eingesetzt erzeugen Sie so ohne Mehraufwand Docker Images, die auf allen benötigten Plattformen reibungslos funktionieren.
Zu den Themen Docker und Kubernetes bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:
Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.