Este guia mostra como usar buildpacks com o código-fonte do seu aplicativo para criar uma imagem de contêiner. Por exemplo, use buildpacks para criar o código-fonte do serviço do Cloud Run em uma imagem de contêiner.
Há dois métodos para criar imagens de contêiner com buildpacks:
- Crie localmente com a CLI do
packpara testar localmente seu aplicativo e prototipar com rapidez as alterações antes da implantação. - Crie remotamente com o Cloud Build. A criação com o Cloud Build é útil para aplicativos grandes que têm processos de build com uso intensivo de recursos e também pode ajudar a proteger sua cadeia de suprimentos de software.
Builds locais
Use a CLI do pack para criar seu aplicativo localmente em uma imagem de contêiner.
Antes de começar
- Instale o Docker Community Edition (CE) na
estação de trabalho. O Docker é usado pela
packcomo um builder de imagens OCI. - Instale a CLI Pack.
- Instale a ferramenta de controle de origem Git para buscar a amostra de aplicativo do GitHub.
Criar um aplicativo localmente
Use o comando pack build e especifique o builder padrão --builder=gcr.io/buildpacks/builder para criar as imagens de contêiner localmente.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Substitua IMAGE_NAME pelo nome a imagem de contêiner do seu serviço.
Também é possível personalizar a imagem de contêiner estendendo as imagens de build e execução.
Criar um aplicativo de amostra localmente
Os exemplos a seguir demonstram como criar uma amostra localmente.
- Clone o repositório de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Altere para o diretório que contém o exemplo de código do aplicativo:
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
- Use
packpara criar a imagem do aplicativo de amostra: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
- Execute a imagem usando
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
- Acesse o aplicativo em execução pelo localhost:8080.
Builds remotos
Use o Cloud Build para criar o aplicativo em uma imagem de contêiner e o Artifact Registry como repositório de contêineres para armazenamento e implantação de cada imagem.
Antes de começar
- Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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 role
(
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.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte 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 role
(
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.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - Verifique se o seu Google Cloud projeto tem acesso a um repositório de imagens do contêiner.
Para configurar o acesso a um repositório do Docker no Artifact Registry:
- Crie um novo repositório do Docker no mesmo local do seu Google Cloud projeto.
Substitua:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAMEpelo nome que você escolheu para o repositório do Docker.REGIONcom o local em ou mais próximo do local do seu Google Cloud projeto.DESCRIPTIONcom uma descrição da sua escolha.
Por exemplo, para criar um repositório
dockeremus-west2com a descrição "repositório do Docker", execute:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- Verifique se o repositório foi criado:
gcloud artifacts repositories list
Na lista, você verá o nome que escolheu para o repositório do Docker.
- Crie um novo repositório do Docker no mesmo local do seu Google Cloud projeto.
Criar um aplicativo remotamente
Use o comando gcloud builds submit para criar e fazer upload da imagem do contêiner para o repositório.
Especifique a imagem do contêiner no próprio comando ou use um arquivo de configuração.
Criar com o comando
Para criar sem um arquivo de configuração, especifique a flag image:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Substitua:
LOCATIONpelo nome da região do repositório de contêineres. Exemplo:us-west2PROJECT_IDpelo ID do seu Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.IMAGE_NAMEpelo nome da imagem do contêiner.
Exemplo:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo/app-image
Criar com arquivos de configuração
Use um
arquivo de configuração
para definir os detalhes de configuração do repositório de imagens. O arquivo de configuração usa o formato YAML e precisa incluir uma etapa de build que usa a CLI pack.
Crie um nome de arquivo YAML
cloudbuild.yamlque inclua o URI do repositório de imagens do contêiner.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 - --publish - name: gcr.io/cloud-builders/docker entrypoint: pack args: - pull - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME images: - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAMESubstitua:
LOCATIONpelo nome da região do repositório de contêineres, por exemplo,us-west2.PROJECT_IDpelo ID do seu Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.IMAGE_NAMEpelo nome da imagem do contêiner.
Crie o aplicativo.
Se você nomeou seu arquivo de configuração
cloudbuild.yaml, execute o seguinte comando:gcloud builds submit .
Exemplo: criar um aplicativo de amostra remotamente
Os exemplos a seguir demonstram como criar uma amostra remotamente e, em seguida, verificar se a imagem de contêiner foi enviada para o repositório no Artifact Registry.
- Clone o repositório de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Altere para o diretório que contém o exemplo de código do aplicativo:
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
- Use
gcloudpara enviar o código-fonte do aplicativo para o 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
-
Verifique se o aplicativo de amostra foi publicado em
REPO_NAME:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Substitua:
LOCATIONpelo nome da região do repositório de contêineres. Exemplo:us-west2PROJECT_IDpelo ID do seu Google Cloud projeto.REPO_NAMEpelo nome do repositório do Docker.
Próximas etapas
- Implantar a imagem no Cloud Run.
- Definir as variáveis de ambiente.
- Configurar imagens de build.
- Acelere builds com imagens em cache.