En esta guía, se muestra 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 paquetes de compilación para compilar el código fuente del servicio de Cloud Run en una imagen de contenedor.
Existen dos métodos para compilar imágenes de contenedores con paquetes de compilación:
- Compila de forma local con la CLI de
packpara probar tu aplicación de forma local y crear prototipos rápidamente de los cambios antes de la implementación. - Compila de forma remota con Cloud Build. La compilación con Cloud Build es útil para aplicaciones grandes que tienen procesos de compilación de uso intensivo de recursos y también pueden ayudar a proteger tu cadena de suministro de software.
Compilaciones locales
Usa la CLI de pack para compilar tu aplicación de forma local en una imagen de contenedor.
Antes de comenzar
- Instala la edición de la comunidad de Docker (CE) en tu estación de trabajo.
packusa Docker como un compilador de imágenes de OCI. - Instala la CLI de Pack.
- Instala la herramienta de control de fuente Git para obtener la aplicación de ejemplo de GitHub.
Compila una aplicación de forma local
Usa el comando pack build y especifica el compilador predeterminado --builder=gcr.io/buildpacks/builder para compilar las imágenes de contenedor de forma local.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Reemplaza IMAGE_NAME por el nombre de la imagen de contenedor de tu servicio.
También puedes personalizar la imagen de contenedor mediante la extensión de la compilación y ejecución de imágenes.
Compila una aplicación de muestra de manera local
En los siguientes ejemplos, se muestra cómo compilar una muestra de forma local.
- Clona el repositorio de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Ve al directorio que contiene el código de muestra 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
- Usa
packpara compilar la imagen de la aplicación de muestra: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
- 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
- Navega a localhost:8080 para visitar la aplicación en ejecución.
Compilaciones remotas
Usa Cloud Build para compilar la aplicación en una imagen de contenedor y Artifact Registry como el repositorio de contenedores en el que se implementa y almacena cada imagen.
Antes de comenzar
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init - Asegúrate de que tu proyecto Google Cloud tenga acceso a un repositorio de imágenes de contenedor.
Para configurar el acceso a un repositorio de Docker en Artifact Registry, haz lo siguiente:
- Crea un nuevo repositorio de Docker en la misma ubicación de tu proyecto Google Cloud .
Reemplaza lo siguiente:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAMEpor el nombre que elijas para el repositorio de Docker.REGIONpor la ubicación en la ubicación de tu proyecto de Google Cloud o más cercana a ella.DESCRIPTIONpor una descripción que elijas.
Por ejemplo, para crear un repositorio de
dockerenus-west2con la descripción “Repositorio de Docker”, ejecuta lo siguiente:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- Verifica que se haya creado el repositorio:
gcloud artifacts repositories list
Deberías ver el nombre que elijas para tu repositorio de Docker en la lista.
- Crea un nuevo repositorio de Docker en la misma ubicación de tu proyecto Google Cloud .
LOCATIONpor el nombre de la región de tu repositorio de contenedores. Ejemplo:us-west2PROJECT_IDcon el ID de tu proyecto de Google Cloud .REPO_NAMEpor el nombre de tu repositorio de Docker.IMAGE_NAMEpor el nombre de la imagen de contenedor- Crea un archivo YAML llamado
cloudbuild.yamlque incluya el URI de tu repositorio de imágenes de contenedor. LOCATIONpor el nombre de la región de tu repositorio de contenedores, por ejemplo,us-west2.PROJECT_IDcon el ID de tu proyecto de Google Cloud .REPO_NAMEpor el nombre de tu repositorio de Docker.IMAGE_NAMEpor el nombre de la imagen de contenedorCompila la aplicación.
Si nombras al archivo de configuración
cloudbuild.yaml, puedes ejecutar el siguiente comando:gcloud builds submit .- Clona el repositorio de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Ve al directorio que contiene el código de muestra 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
- Usa
gcloudpara 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
-
Verifica que la aplicación de muestra se haya publicado de forma correcta en
REPO_NAME:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Reemplaza lo siguiente:
LOCATIONpor el nombre de región de tu repositorio de contenedores. Ejemplo:us-west2PROJECT_IDcon el ID de tu proyecto de Google Cloud .REPO_NAMEpor el nombre de tu repositorio de Docker.
- Implementa tu imagen en Cloud Run
- Configura las variables de entorno.
- Configura imágenes de compilación.
- Acelera compilaciones con imágenes almacenadas en caché.
Compila una aplicación de forma remota
Usa el comando gcloud builds submit para compilar y subir la imagen de contenedor a tu repositorio.
Puedes especificar tu imagen de contenedor en el comando o usar un archivo de configuración.
Cómo compilar con el comando
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
Reemplaza lo siguiente:
Ejemplo:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo/app-image
Cómo 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 con solo 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 use la CLI de pack.
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
Reemplaza lo siguiente:
Ejemplo: Compila una aplicación de muestra de forma remota
En los siguientes ejemplos, se muestra cómo compilar una muestra de forma remota y, luego, verificar que la imagen del contenedor se haya enviado a tu repositorio en Artifact Registry.