Wenn Sie einen benutzerdefinierten Container in Dataflow verwenden, muss der Container der Architektur der Worker-VMs entsprechen. In diesem Dokument wird beschrieben, wie Sie Container mit mehreren Architekturen erstellen, die sowohl mit x86- als auch mit Arm-VMs kompatibel sind.
Sie können die Docker-Befehlszeile oder Cloud Build verwenden, um das Container-Image zu erstellen.
Image mit Docker erstellen
So erstellen Sie ein Dockerfile: Verwenden Sie die Anweisung
FROM
, um ein Basis-Image mit mehreren Architekturen anzugeben.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Installieren Sie das Buildx-Tool. Führen Sie den folgenden Befehl aus, um zu prüfen, ob das Tool installiert ist:
docker buildx version
Führen Sie den folgenden Befehl aus, um eine Builder-Instanz zu erstellen, die den
docker-container
-Treiber verwendet. Dieser Treiber ist erforderlich, um Images mit mehreren Architekturen zu erstellen.docker buildx create --driver=docker-container --use
Mit dem Flag
--use
wird die neue Builder-Instanz als aktueller Builder festgelegt.Führen Sie den folgenden Befehl aus, um Docker für die Authentifizierung von Anfragen an Artifact Registry zu konfigurieren.
gcloud auth configure-docker REGION-docker.pkg.dev
Ersetzen Sie REGION durch die Region des Artifact Registry-Repositorys.
Führen Sie den folgenden Befehl aus, um das Container-Image zu erstellen und per Push in die Artifact Registry zu übertragen:
docker buildx build \ --platform=linux/amd64,linux/arm64 \ -t REGISTRY/IMAGE:TAG \ --push .
Ersetzen Sie dabei Folgendes:
- REGISTRY: das Docker-Repository
- IMAGE: der Name des Image
- TAG: das Image-Tag
Image mit Cloud Build erstellen
So erstellen Sie ein Dockerfile: Verwenden Sie die Anweisung
FROM
, um ein Basis-Image mit mehreren Architekturen anzugeben.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Erstellen Sie im selben Verzeichnis wie die Dockerfile eine Datei mit dem Namen
docker_buildx.yaml
. Fügen Sie den folgenden Text ein:steps: - name: 'docker' args: ['buildx', 'create', '--driver', 'docker-container', '--name', 'container', '--use'] - name: 'docker' args: ['buildx', 'build', '--platform', 'linux/amd64,linux/arm64', '-t', 'REGISTRY/IMAGE:TAG', '--push', '.']
Ersetzen Sie dabei Folgendes:
- REGISTRY: das Docker-Repository
- IMAGE: der Name des Image
- TAG: das Image-Tag
Führen Sie den Befehl
gcloud builds submit
aus, um das Image zu erstellen und per Push zu übertragen:gcloud builds submit --region=REGION --config docker_buildx.yaml
Ersetzen Sie REGION durch die Region des zu verwendenden Cloud Build-Dienstes.
Weitere Informationen finden Sie unter Docker-Image mit Cloud Build erstellen und per Push übertragen.
Container-Image prüfen
Öffnen Sie in der Cloud Console die Seite Repositories.
Klicken Sie auf das Repository mit dem Container-Image.
Klicken Sie auf das Image, um seine Versionen aufzurufen.
Klicken Sie auf eine Version.
Klicken Sie auf Manifest.
Der Abschnitt
platform
in der Manifestdatei sollte Einträge fürarm64
undamd64
enthalten. Beispiel:{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:441d5438885049e2b388523a8cb5b77ea829c3c3f53326fb221fe185abd67f07", "size": 3074, "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:d3b98b0f8f3f555f5453c79b240bd2b862d4f52d853fe81bae55f01a663de29c", "size": 3073, "platform": { "architecture": "arm64", "os": "linux" } } ] }