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:
- Ten a mano el código fuente de la aplicación junto con
Dockerfile
. - Si deseas usar los comandos de
gcloud
de esta página, instala la herramienta de línea de comandos degcloud
. - Si deseas ejecutar imágenes, instala Docker.
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:
- En el mismo directorio que contiene el código fuente de tu aplicación, crea un archivo llamado
cloudbuild.yaml
ocloudbuild.json
. 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 engcr.io/cloud-builders/docker
. En el siguiente archivo de configuración de ejemplo, en el camponame
se especifica que Cloud Build usa la imagen ya compilada de Docker para ejecutar la tarea indicada por el campoargs
. 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 CloudIMAGE_NAME
: El nombre de tu imagen de contenedor
Si tu
Dockerfile
y tu código fuente están en directorios diferentes, agrega-f
y la ruta alDockerfile
a la lista de argumentos en el campoargs
: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 CloudIMAGE_NAME
: El nombre de tu imagen de contenedorDOCKERFILE_PATH
: Ruta de acceso a tuDockerfile
.
- Agrega un campo
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
niSOURCE_DIRECTORY
en el comandogcloud 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 con 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 CloudIMAGE_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/
opkg.dev
.
Estos son algunos ejemplos de comandos:
Ejecuta una compilación mediante el
gcr.io/buildpacks/builder
predeterminado para crear la imagengcr.io/gcb-docs-project/hello
:gcloud alpha 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, consultagcloud 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'
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 se usa el campo images
, la imagen almacenada se mostrará en los resultados de 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 compilada, la imagen no se mostrará en los resultados de 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:
- En el mismo directorio que contiene el código fuente de tu aplicación y
Dockerfile
, crea un archivo llamadocloudbuild.yaml
ocloudbuild.json
. 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.
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:
En el mismo directorio que contiene el código fuente de tu aplicación y
Dockerfile
, crea un archivo llamadocloudbuild.yaml
ocloudbuild.json
.En el archivo de configuración de compilación, agrega un paso de compilación de
docker
para compilar una imagen y, luego, agrega otro paso de compilación dedocker
y pasa argumentos a fin de invocar el comandopush
: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.
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:
- En el mismo directorio que contiene el código fuente de tu aplicación y
Dockerfile
, crea un archivo llamadocloudbuild.yaml
ocloudbuild.json
. 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 campoimages
: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.
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.
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)?
Escribe
y
y, luego, ingresa.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?
- Obtén más información sobre cómo compilar aplicaciones de Go.
- Obtén información para almacenar artefactos de compilación en Cloud Storage.
- Obtén más información para almacenar artefactos de compilación en Artifact Registry.