Si usas un contenedor personalizado en Dataflow, este debe coincidir con la arquitectura de las VMs de los trabajadores. En este documento se describe cómo crear contenedores de varias arquitecturas que sean compatibles con máquinas virtuales x86 y Arm.
Puedes usar la CLI de Docker o Cloud Build para compilar la imagen de contenedor.
Usar Docker para compilar la imagen
Crea un Dockerfile. Usa la instrucción
FROMpara 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 ./Instala la herramienta Buildx. Para comprobar si la herramienta está instalada, ejecuta el siguiente comando:
docker buildx versionEjecuta 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 --useLa marca
--usedefine la nueva instancia del compilador como el compilador actual.Ejecuta el siguiente comando para configurar Docker de forma que autentique las solicitudes a Artifact Registry.
gcloud auth configure-docker REGION-docker.pkg.devSustituye 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 .Haz los cambios siguientes:
- REGISTRY: el repositorio Docker
- IMAGE: nombre de la imagen
- TAG: la etiqueta de imagen
Usar Cloud Build para compilar la imagen
Crea un Dockerfile. Usa la instrucción
FROMpara 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 archivo 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', '.']Haz los cambios siguientes:
- REGISTRY: el repositorio Docker
- IMAGE: nombre de la imagen
- TAG: la etiqueta de imagen
Para crear y enviar la imagen, ejecuta el comando
gcloud builds submit:gcloud builds submit --region=REGION --config docker_buildx.yamlSustituye REGION por la región del servicio Cloud Build que quieras usar.
Para obtener más información, consulta el artículo sobre cómo compilar y enviar una imagen Docker con Cloud Build.
Verificar la imagen de 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 sus versiones.
Haz clic en una versión.
Haz clic en Manifiesto.
En el archivo de manifiesto, la sección
platformdebe tener entradas paraarm64yamd64. 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" } } ] }