Crear una aplicación con compilaciones

En esta guía se explica cómo usar paquetes de compilación con el código fuente de tu aplicación para crear una imagen de contenedor. Por ejemplo, usa buildpacks para compilar el código fuente de tu servicio Cloud Run en una imagen de contenedor.

Hay dos métodos para crear imágenes de contenedor con buildpacks:

  • Compila de forma local con la CLI de pack para probar tu aplicación localmente y crear prototipos de cambios rápidamente antes de la implementación.
  • Compila de forma remota con Cloud Build. Compilar con Cloud Build es útil para aplicaciones grandes que tienen procesos de compilación que requieren muchos recursos y también puede ayudarte a proteger tu cadena de suministro de software.

Compilaciones locales

Utiliza la CLI de pack para compilar tu aplicación localmente en una imagen de contenedor.

Antes de empezar

  1. Instala Docker Community Edition (CE) en tu estación de trabajo. pack usa Docker como compilador de imágenes OCI.
  2. Instala Pack CLI.
  3. Instala la herramienta de control de versiones de Git para obtener la aplicación de ejemplo de GitHub.

Crear una aplicación de forma local

Usa el comando pack build y especifica el compilador predeterminado --builder=gcr.io/buildpacks/builder para compilar tus imágenes de contenedor de forma local.

pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME

Sustituye IMAGE_NAME por el nombre de la imagen de contenedor de tu servicio.

También puedes personalizar tu imagen de contenedor ampliando las imágenes de compilación y ejecución.

Crear una aplicación de ejemplo de forma local

En los siguientes ejemplos se muestra cómo compilar un ejemplo de forma local.

  1. Clona el repositorio de ejemplo en tu máquina local:
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. Cambia al directorio que contiene el código de ejemplo de la aplicación:

    Go

    cd buildpack-samples/sample-go

    Java

    cd buildpack-samples/sample-java-gradle

    Node.js

    cd buildpack-samples/sample-node

    PHP

    cd buildpack-samples/sample-php

    Python

    cd buildpack-samples/sample-python

    Ruby

    cd buildpack-samples/sample-ruby

    .NET

    cd buildpack-samples/sample-dotnet
  3. Usa pack para crear la imagen de la aplicación de ejemplo:

    Go

    pack build --builder=gcr.io/buildpacks/builder sample-go

    Java

    pack build --builder=gcr.io/buildpacks/builder sample-java-gradle

    Node.js

    pack build --builder=gcr.io/buildpacks/builder sample-node

    PHP

    pack build --builder=gcr.io/buildpacks/builder sample-php

    Python

    pack build --builder=gcr.io/buildpacks/builder sample-python

    Ruby

    pack build --builder=gcr.io/buildpacks/builder sample-ruby

    .NET

    pack build --builder=gcr.io/buildpacks/builder sample-dotnet
  4. Ejecuta la imagen con docker:

    Go

    docker run -p8080:8080 sample-go

    Java

    docker run -it -ePORT=8080 -p8080:8080 sample-java-gradle

    Node.js

    docker run -it -ePORT=8080 -p8080:8080 sample-node

    PHP

    docker run -it --rm -p 8080:8080 sample-php

    Python

    docker run -it -ePORT=8080 -p8080:8080 sample-python

    Ruby

    docker run -it -ePORT=8080 -p8080:8080 sample-ruby

    .NET

    docker run -it -ePORT=8080 -p8080:8080 sample-dotnet
  5. Visita la aplicación en ejecución navegando a localhost:8080.

Compilaciones remotas

Usa Cloud Build para compilar tu aplicación en una imagen de contenedor y Artifact Registry como repositorio de contenedores desde el que almacenar y desplegar cada imagen.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build and Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build and Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. Asegúrate de que tu proyecto Google Cloud tiene acceso a un repositorio de imágenes de contenedor.

    Para configurar el acceso a un repositorio de Docker en Artifact Registry, sigue estos pasos:

    1. Crea un repositorio de Docker en la misma ubicación que tu Google Cloud proyecto.
      gcloud artifacts repositories create REPO_NAME \
      --repository-format=docker \
      --location=REGION --description="DESCRIPTION"
      Reemplazar:
      • REPO_NAME por el nombre que elijas para tu repositorio de Docker.
      • REGION con la ubicación del proyecto o la más cercana. Google Cloud
      • DESCRIPTION con la descripción que quieras.

      Por ejemplo, para crear un repositorio docker en us-west2 con la descripción "Repositorio de Docker", ejecuta el siguiente comando:

      gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \
      --location=us-west2 --description="Docker repository"
    2. Verifica que se haya creado el repositorio:
      gcloud artifacts repositories list

      Debería ver el nombre que elija para su repositorio de Docker en la lista.

  15. Crear una aplicación de forma remota

    Usa el comando gcloud builds submit para compilar y subir tu imagen de contenedor a tu repositorio.

    Puedes especificar la imagen del contenedor en el propio comando o usar un archivo de configuración.

    Crear con comandos

    Para compilar sin un archivo de configuración, especifica la marca image:

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

    Sustituye:

    • LOCATION con el nombre de la región de tu repositorio de contenedores. Ejemplo: us-west2
    • PROJECT_ID por el ID de tu Google Cloud proyecto.
    • REPO_NAME con el nombre de tu repositorio de Docker.
    • IMAGE_NAME con el nombre de tu imagen de contenedor.

    Ejemplo:

    gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo/app-image

    Compilar con archivos de configuración

    Puedes usar un archivo de configuración para definir los detalles de configuración de tu repositorio de imágenes y simplificar el comando de compilación. El archivo de configuración usa el formato de archivo YAML y debe incluir un paso de compilación que utilice la CLI de pack.

    1. Crea un archivo YAML llamado cloudbuild.yaml que incluya el URI de tu repositorio de imágenes de contenedor.
      options:
        logging: CLOUD_LOGGING_ONLY
        pool: {}
      projectId: PROJECT_ID
      steps:
      - name: gcr.io/k8s-skaffold/pack
        entrypoint: pack
        args:
        - build
        - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
        - --builder
        - gcr.io/buildpacks/builder:latest
        - --network
        - cloudbuild
      images:
      - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

    Sustituye:

    • LOCATION con el nombre de la región de tu repositorio de contenedores (por ejemplo, us-west2).
    • PROJECT_ID por el ID de tu Google Cloud proyecto.
    • REPO_NAME con el nombre de tu repositorio de Docker.
    • IMAGE_NAME con el nombre de tu imagen de contenedor.
    1. Compila la aplicación.

      Si has llamado cloudbuild.yaml al archivo de configuración, puedes ejecutar el siguiente comando:

      gcloud builds submit .
      

    Ejemplo: crear una aplicación de ejemplo de forma remota

    En los siguientes ejemplos se muestra cómo compilar un ejemplo de forma remota y, a continuación, verificar que la imagen de contenedor se ha enviado a tu repositorio en Artifact Registry.

    1. Clona el repositorio de ejemplo en tu máquina local:
      git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
    2. Cambia al directorio que contiene el código de ejemplo de la aplicación:

      Go

      cd buildpack-samples/sample-go

      Java

      cd buildpack-samples/sample-java-gradle

      Node.js

      cd buildpack-samples/sample-node

      PHP

      cd buildpack-samples/sample-php

      Python

      cd buildpack-samples/sample-python

      Ruby

      cd buildpack-samples/sample-ruby

      .NET

      cd buildpack-samples/sample-dotnet
    3. Usa gcloud para enviar el código fuente de la aplicación a Cloud Build:

      Go

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-go

      Java

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-java-gradle

      Node.js

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-node

      PHP

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-php

      Python

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-python

      Ruby

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-ruby

      .NET

      gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-dotnet
    4. Comprueba que la aplicación de ejemplo se haya publicado correctamente en REPO_NAME:
      gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME

      Sustituye:

      • LOCATION con el nombre de la región de tu repositorio de contenedores. Ejemplo: us-west2
      • PROJECT_ID por el ID de tu Google Cloud proyecto.
      • REPO_NAME con el nombre de tu repositorio de Docker.

    Siguientes pasos