Si usas un contenedor personalizado en Dataflow, el contenedor debe coincidir con la arquitectura de las VMs de trabajador. En este documento, se describe cómo crear contenedores de varias arquitecturas compatibles con VMs x86 y Arm.
Puedes usar la CLI de Docker o Cloud Build para compilar la imagen del contenedor.
Usa Docker para compilar la imagen
Crea un Dockerfile. Usa la instrucción
FROM
para especificar una imagen base de varias arquitecturas.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Instalar la herramienta Buildx. Para comprobar si la herramienta está instalada, ejecuta el siguiente comando:
docker buildx version
Ejecuta el siguiente comando para crear una instancia de compilador que use el controlador
docker-container
. Este controlador es necesario para compilar imágenes de varias arquitecturas.docker buildx create --driver=docker-container --use
La marca
--use
establece la instancia de compilador nueva como el compilador actual.Ejecuta el siguiente comando para configurar Docker a fin de autenticar solicitudes en Artifact Registry.
gcloud auth configure-docker REGION-docker.pkg.dev
Reemplaza REGION por la región del repositorio de Artifact Registry.
Ejecuta el siguiente comando para compilar y enviar la imagen de contenedor a Artifact Registry:
docker buildx build \ --platform=linux/amd64,linux/arm64 \ -t REGISTRY/IMAGE:TAG \ --push .
Reemplaza lo siguiente:
- REGISTRY: el repositorio de Docker
- IMAGE: el nombre de la imagen
- TAG: la etiqueta de imagen
Usa Cloud Build para compilar la imagen
Crea un Dockerfile. Usa la instrucción
FROM
para especificar una imagen base de varias arquitecturas.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
En el mismo directorio que contiene el Dockerfile, crea un archivo llamado
docker_buildx.yaml
. Pega el siguiente texto: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', '.']
Reemplaza lo siguiente:
- REGISTRY: el repositorio de Docker
- IMAGE: el nombre de la imagen
- TAG: la etiqueta de imagen
Para compilar y enviar la imagen, ejecuta el comando
gcloud builds submit
:gcloud builds submit --region=REGION --config docker_buildx.yaml
Reemplaza REGION por la región del servicio de Cloud Build que se usará.
Para obtener más información, consulta Compila y envía una imagen de Docker con Cloud Build.
Verifica la imagen del contenedor
Abre la página Repositorios en la consola de Google Cloud.
Haz clic en el repositorio con la imagen de contenedor.
Haz clic en la imagen para ver las versiones.
Haz clic en una versión.
Haz clic en Manifiesto.
En el archivo de manifiesto, la sección
platform
debe tener entradas paraarm64
yamd64
. Por ejemplo:{ "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" } } ] }