Compila imágenes de contenedores

En esta página, se describe cómo configurar Cloud Build para compilar y almacenar imágenes de Docker. Si estás dando los primeros pasos en Cloud Build, lee primero las guías de inicio rápido y la descripción general de la configuración de compilación.

Cloud Build proporciona imágenes prediseñadas a las que puedes hacer referencia en un archivo de configuración de Cloud Build para ejecutar tus tareas. Google Cloud admite y mantiene estas imágenes. Puedes usar la imagen de Docker preconfigurada y compatible para ejecutar los comandos de Docker y compilar imágenes de Docker.

Antes de comenzar

En las instrucciones de esta página se supone que estás familiarizado con Docker. Además, ten en cuenta lo siguiente:

Compila con un archivo de configuración de compilación

Para compilar tu imagen de Docker con un archivo de configuración de compilación, sigue estos pasos:

  1. En el mismo directorio que contiene el código fuente de tu aplicación, crea un archivo llamado cloudbuild.yaml o cloudbuild.json.
  2. En el archivo de configuración de compilación:

    • Agrega un campo name y especifica la imagen prediseñada de Docker. La imagen ya compilada se almacena en Container Registry en gcr.io/cloud-builders/docker. En el archivo de configuración de ejemplo que se muestra a continuación, el campo name especifica que Cloud Build usa la imagen de Docker de compilación previa para ejecutar la tarea indicada por el campo args.
    • En el campo args, agrega los argumentos para compilar la imagen.

      YAML

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: [ 'build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.' ]
      

      JSON

      {
       "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME",
              "."
             ]
         }
         ]
       }
      

      Reemplaza los valores de marcador de posición en la configuración de compilación anterior por lo siguiente:

      • PROJECT_ID: El ID del proyecto de Cloud
      • IMAGE_NAME: El nombre de tu imagen de contenedor

      Si tu Dockerfile y el código fuente están en directorios diferentes, agrega -f y la ruta de acceso a Dockerfile a la lista de argumentos en el campo args:

      YAML

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: [ 'build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '-f', 'DOCKERFILE_PATH', '.' ]
      

      JSON

      {
       "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME", '-f', 'DOCKERFILE_PATH', "."
             ]
         }
         ]
       }
      

      Reemplaza los valores de marcador de posición en la configuración de compilación anterior por lo siguiente:

      • PROJECT_ID: El ID del proyecto de Cloud
      • IMAGE_NAME: El nombre de tu imagen de contenedor
      • DOCKERFILE_PATH: Ruta de acceso a tu Dockerfile.
  3. Usa este comando para comenzar a compilar con el archivo de configuración de compilación:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Reemplaza los valores de marcador de posición en el comando anterior por los siguientes:

    • CONFIG_FILE_PATH: La ruta de acceso al archivo de configuración de compilación.
    • SOURCE_DIRECTORY: La ruta de acceso o la URL al código fuente.

    Si se no especifica CONFIG_FILE_PATH ni SOURCE_DIRECTORY en el comando gcloud builds submit, Cloud Build da por hecho que el archivo de configuración y el código fuente están en el directorio de trabajo actual.

Compila con un Dockerfile

Cloud Build te permite compilar una imagen de Docker con solo un Dockerfile. No necesitas un archivo de configuración de compilación diferente.

Para compilar mediante un Dockerfile, ejecuta el siguiente comando desde el directorio que contiene el código fuente y el Dockerfile:

    gcloud builds submit --tag gcr.io/PROJECT_ID/IMAGE_NAME

Reemplaza los valores de marcador de posición en el comando anterior por los siguientes:

  • PROJECT_ID: El ID del proyecto de Cloud
  • IMAGE_NAME: El nombre de tu imagen de contenedor

Compila con los paquetes de compilación nativos de la nube

Cloud Build te permite compilar una imagen sin un Dockerfile o un archivo de configuración de compilación. Puedes hacerlo con paquetes de compilación nativos de la nube.

Para compilar mediante paquetes de compilación, ejecuta el siguiente comando desde el directorio que contiene el código fuente:

    gcloud builds submit --pack builder=BUILDPACK_BUILDER, \
        env=ENVIRONMENT_VARIABLE, \
        image=IMAGE

Reemplaza los valores de marcador de posición en los comandos anteriores por la siguiente información:

  • BUILDPACK_BUILDER: El compilador de paquetes de compilación que se usará Si no especificas un compilador, Cloud Build usa gcr.io/buildpacks/builder de forma predeterminada.
  • ENVIRONMENT_VARIABLE: Cualquier variable de entorno para la compilación.
  • IMAGE: La URL de la imagen en Container Registry. El nombre de la imagen debe estar en los espacios de nombres gcr.io/ o pkg.dev.

Estos son algunos ejemplos de comandos:

  • Ejecuta una compilación mediante el gcr.io/buildpacks/builder predeterminado para crear la imagen gcr.io/gcb-docs-project/hello:

      gcloud builds submit --pack image=gcr.io/gcb-docs-project/hello
    
  • Pasa múltiples variables de entorno a tu compilación mediante ^--^ como separador. Para obtener más información sobre el escape de argumentos, consulta gcloud topic escaping.

      gcloud builds submit --pack \
          ^--^image=gcr.io/my-project/myimage--env=GOOGLE_ENTRYPOINT='java -jar target/myjar.jar',GOOGLE_RUNTIME_VERSION='3.1.301'
    

Configuración de activadores para usar paquetes de compilación: además de compilar con la línea de comandos, puedes configurar activadores para usar paquetes de compilación a fin de compilar tu imagen de forma automática. Para obtener más información, consulta Crea y administra activadores de compilación.

Almacena imágenes en Container Registry

Puedes configurar Cloud Build para almacenar tu imagen compilada de una de las siguientes maneras:

  • Mediante el campo images, que almacena la imagen en Container Registry después de que se completa la compilación.
  • Mediante el comando docker push, que almacena la imagen en Container Registry como parte de tu flujo de compilación.

La diferencia entre usar el campo images y el comando push de Docker es que, si usas el campo images, la imagen almacenada se mostrará en los resultados de la compilación. Esto incluye la página Descripción de compilación de una compilación en Cloud Console, los resultados de Build.get() y los resultados de gcloud builds list. Sin embargo, si usas el comando push de Docker para almacenar la imagen de compilación, esta no se mostrará en los resultados de la compilación.

Si quieres almacenar la imagen como parte del flujo de compilación y deseas mostrarla en los resultados de compilación, usa el comando push de Docker y el campo images del archivo de configuración de compilación.

Para almacenar una imagen de contenedor en Container Registry una vez que se complete la compilación, haz lo siguiente:

  1. En el mismo directorio que contiene el código fuente de tu aplicación y Dockerfile, crea un archivo llamado cloudbuild.yaml o cloudbuild.json.
  2. En el archivo de configuración de compilación, agrega un paso de compilación para compilar una imagen y, luego, agrega un campo images que especifique la imagen compilada. Esto almacena la imagen en Container Registry. En el siguiente fragmento se muestra una configuración de compilación para compilar una imagen y almacenarla en Container Registry:

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    images: ['gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
    "steps": [
    {
        "name": "gcr.io/PROJECT_ID/IMAGE_NAME",
        "args": [
            "build",
            "-t",
            "gcr.io/PROJECT_ID/IMAGE_NAME",
            "."
        ]
    }
    ],
    "images": [
        "gcr.io/PROJECT_ID/IMAGE_NAME"
    ]
    }
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • PROJECT_ID es el ID del proyecto de Cloud.
    • IMAGE_NAME es el nombre de tu imagen de contenedor.
  3. Usa este comando para comenzar a compilar con el archivo de configuración de compilación:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • CONFIG_FILE_PATH es la ruta de acceso al archivo de configuración de compilación.
    • SOURCE_DIRECTORY es la ruta o la URL del código fuente.

Para almacenar la imagen en Container Registry como parte de tu flujo de compilación, haz lo siguiente:

  1. En el mismo directorio que contiene el código fuente de tu aplicación y Dockerfile, crea un archivo llamado cloudbuild.yaml o cloudbuild.json.

  2. En el archivo de configuración de la compilación, agrega un paso de compilación de docker para compilar una imagen y, luego, agrega otro paso de compilación de docker y pasa argumentos para invocar el comando push:

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
      "steps": [
       {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME",
              "."
           ]
       },
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
              "push",
              "gcr.io/PROJECT_ID/IMAGE_NAME"
            ]
       }
      ]
    }
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • PROJECT_ID es el ID del proyecto de Cloud.
    • IMAGE_NAME es el nombre de tu imagen de contenedor.
  3. Usa este comando para comenzar a compilar con el archivo de configuración de compilación:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • CONFIG_FILE_PATH es la ruta de acceso al archivo de configuración de compilación.
    • SOURCE_DIRECTORY es la ruta o la URL del código fuente.

Para almacenar una imagen como parte de tu flujo de compilación y mostrarla en los resultados de compilación, haz lo siguiente:

  1. En el mismo directorio que contiene el código fuente de tu aplicación y Dockerfile, crea un archivo llamado cloudbuild.yaml o cloudbuild.json.
  2. En el archivo de configuración de compilación, después del paso que compila la imagen, agrega un paso para invocar el comando push de Docker y, luego, agrega el campo images:

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE_NAME']
    images: ['gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
        "steps": [
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
               "build",
               "-t",
               "gcr.io/PROJECT_ID/IMAGE_NAME",
               "."
            ]
       },
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
               "push",
               "gcr.io/PROJECT_ID/IMAGE_NAME"
            ]
       }
       ],
        "images": [
           "gcr.io/PROJECT_ID/IMAGE_NAME"
        ]
    }
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • PROJECT_ID es el ID del proyecto de Cloud.
    • IMAGE_NAME es el nombre de tu imagen de contenedor.
  3. Usa este comando para comenzar a compilar con el archivo de configuración de compilación:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • CONFIG_FILE_PATH es la ruta de acceso al archivo de configuración de compilación.
    • SOURCE_DIRECTORY es la ruta o la URL del código fuente.

Ejecuta la imagen de Docker

Para verificar que la imagen que compilaste funciona como lo esperado, puedes ejecutarla mediante Docker.

  1. Configura Docker para que use tus credenciales de Container Registry cuando interactúe con este (solo es necesario que lo hagas una vez):

    gcloud auth configure-docker
    

    Verás un mensaje similar al siguiente:

    The following settings will be added to your Docker config file
    located at [/.docker/config.json]:
    
    {
      "credHelpers": {
        "gcr.io": "gcloud",
        "us.gcr.io": "gcloud",
        "eu.gcr.io": "gcloud",
        "asia.gcr.io": "gcloud",
        "staging-k8s.gcr.io": "gcloud",
        "marketplace.gcr.io": "gcloud"
      }
    }
    
    Do you want to continue (Y/n)?
    
  2. Escribe y y, luego, ingresa.

  3. Ejecuta la imagen de Docker que compilaste antes, en la que PROJECT_ID es el ID del proyecto de Cloud:

    docker run gcr.io/PROJECT_ID/IMAGE_NAME
    

    Verás un resultado similar al siguiente:

    Hello, world! The time is Fri Feb  2 16:09:54 UTC 2018.
    

¿Qué sigue?