Crea immagini container con più architettura per Dataflow

Se utilizzi un container personalizzato in Dataflow, il container deve corrispondere all'architettura delle VM worker. Questo documento descrive come creare container multi-architettura compatibili con le VM x86 e ARM.

Puoi utilizzare l'interfaccia a riga di comando Docker o Cloud Build per creare l'immagine container.

Usa Docker per creare l'immagine

  1. Creare un Dockerfile. Utilizza l'istruzione FROM per specificare un'immagine di base con più architetture.

    FROM apache/beam_python3.10_sdk:2.50.0
    
    # Make your customizations here, for example:
    ENV FOO=/bar
    COPY path/to/myfile ./
    
  2. Installa lo strumento Buildx. Per verificare se lo strumento è installato, esegui questo comando:

    docker buildx version
    
  3. Esegui questo comando per creare un'istanza del builder che utilizzi il driver docker-container. Questo driver è necessario per creare immagini multi-architettura.

    docker buildx create --driver=docker-container --use
    

    Il flag --use imposta la nuova istanza del builder come generatore attuale.

  4. Esegui questo comando per configurare Docker per autenticare le richieste ad Artifact Registry.

    gcloud auth configure-docker REGION-docker.pkg.dev
    

    Sostituisci REGION con la regione del repository Artifact Registry.

  5. Esegui questo comando per creare l'immagine container ed eseguirne il push in 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

usa Cloud Build per creare l'immagine

  1. Creare un Dockerfile. Utilizza l'istruzione FROM per specificare un'immagine di base con più architetture.

    FROM apache/beam_python3.10_sdk:2.50.0
    
    # Make your customizations here, for example:
    ENV FOO=/bar
    COPY path/to/myfile ./
    
  2. Nella stessa directory che contiene 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
  3. Per creare ed eseguire il push dell'immagine, esegui il 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 Creare ed eseguire il push di un'immagine Docker con Cloud Build.

Verifica l'immagine container

  1. Apri la pagina Repositories nella console Google Cloud.

    Apri la pagina Repository

  2. Fai clic sul repository con l'immagine container.

  3. Fai clic sull'immagine per vedere le versioni.

  4. Fai clic su una versione.

  5. Fai clic su Manifest.

  6. La sezione platform del file manifest deve contenere voci per arm64 e amd64. 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"
              }
            }
        ]
      }
    

Passaggi successivi