Docker Images für unterschiedliche Plattformen bauen

Seit ich denken kann beherrschten x86 Architekturen meine IT Welt. Dank Smartphones, dem RaspberriPi, der Graviton Plattform von Amazon oder aktuellen Apple Geräten ändert sich das ein wenig. Als User können von diesem Wettbewerb nur profitieren. Für Programmierer und Admins wird die Welt ein wenig komplexer sobald wir Binaries bauen. Ich kann auf meinem lokalen Host x86_64 GNU/Linux mit nicht ohne erweitertes Tooling gegen eine andere Zielplattform wie linux/arm64 kompilieren und auch keine kompatiblen Images bauen.

Docker bietet dafür ein Cli Plugin namens BuildX vor mit dem Container in spezifischen Umgebungen gebaut werden können.

Der Prozess lässt sich wunderbar in eine Github Action einbauen die Images pusht und baut:

name: Build

on:
  push:
    branches: main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v2
      - name: install buildx
        id: buildx
        uses: crazy-max/ghaction-docker-buildx@v1
        with:
          version: latest
      - name: login to docker hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
      - name: build the image
        run: |
          docker buildx build --push \
            --tag ${{ secrets.DOCKER_REPO_NAME }}:latest \
            --platform linux/amd64,linux/arm64 .

Die paar Zeilen Yaml müssen im Repository unter ./.github/actions abgelegt werden und schon fällt nach jedem Push auf den Main Branch ein neues Image heraus welches support für die Plattformen linux/amd64 und linux/arm64 hat. Das hat den schönen Nebeneffekt, daß sich z.b. Kubernetes automatisch das passende Image zieht und man braucht keine Anpassungen in Code oder Konfiguration zu machen wenn man Docker Images in unterschiedlichen Umgebungen laufen lässt.

Ausbafähig ist an der Stelle die Verwendung von Docker Secrets. Eventuell gibt es auch eine BuildX Action.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.