Se utilizzi un contenitore personalizzato in Dataflow, il contenitore deve corrispondere all'architettura delle VM worker. Questo documento descrive come creare di container con più architetture compatibili con VM sia x86 che Arm.
Puoi utilizzare l'interfaccia a riga di comando di Docker o Cloud Build per creare l'immagine container.
Utilizza Docker per creare l'immagine
Crea un Dockerfile. Usa l'istruzione
FROM
per specificare un un'immagine di base multiarchitettura.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Installa il Buildx lo strumento a riga di comando gcloud. Per verificare se lo strumento è installato, esegui questo comando:
docker buildx version
Esegui il comando seguente per creare un'istanza del generatore che utilizza il driver
docker-container
. Questo driver è necessario per la creazione multi-architettura.docker buildx create --driver=docker-container --use
Il flag
--use
imposta la nuova istanza del generatore come generatore corrente.Esegui questo comando per configurare Docker al fine di autenticare le richieste ad Artifact Registry.
gcloud auth configure-docker REGION-docker.pkg.dev
Sostituisci REGION con la regione del repository Artifact Registry.
Esegui questo comando per creare l'immagine container ed eseguirne il push su Artifact Registry:
docker buildx build \ --platform=linux/amd64,linux/arm64 \ -t REGISTRY/IMAGE:TAG \ --push .
Sostituisci quanto segue:
- REGISTRY: il repository Docker
- IMAGE: il nome dell'immagine
- TAG: il tag immagine
Utilizza Cloud Build per creare l'immagine
Crea un Dockerfile. Utilizza l'istruzione
FROM
per specificare un'immagine di base multi-architettura.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Nella stessa directory contenente il Dockerfile, crea un file denominato
docker_buildx.yaml
. Incolla il seguente testo: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', '.']
Sostituisci quanto segue:
- REGISTRY: il repository Docker
- IMAGE: il nome dell'immagine
- TAG: il tag immagine
Per creare ed eseguire il push dell'immagine, esegui il comando Comando
gcloud builds submit
:gcloud builds submit --region=REGION --config docker_buildx.yaml
Sostituisci REGION con la regione del servizio Cloud Build da utilizzare.
Per ulteriori informazioni, consulta Crea ed esegui il push di un'immagine Docker con Cloud Build.
Verifica l'immagine container
Apri la pagina Repositori nella console Google Cloud.
Fai clic sul repository con l'immagine del contenitore.
Fai clic sull'immagine per vedere le versioni.
Fai clic su una versione.
Fai clic su Manifest.
Nel file manifest, la sezione
platform
deve contenere voci perarm64
eamd64
. Ad esempio:{ "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" } } ] }