Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Exemplo “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild

Modo de foco
Exemplo “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild - AWS CodeBuild

Este exemplo produz como saída de compilação de uma imagem do Docker e, depois, a envia a um repositório de imagens do Amazon Elastic Container Registry (Amazon ECR). Você pode adaptar esta amostra para enviar a imagem Docker para um Docker Hub. Para obter mais informações, consulte Adapte o exemplo “Publicar imagem do Docker no Amazon ECR” para enviar para o Docker Hub.

Para saber como compilar uma imagem de Docker usando uma imagem de compilação personalizada do Docker (docker:dind no Docker Hub), consulte Docker no exemplo de imagem personalizada.

Esse exemplo foi testado fazendo referência a golang:1.12

Esse exemplo usa o novo recurso de compilações do Docker multiestágio, que produz uma imagem de Docker como saída de compilação. Depois, ele envia a imagem do Docker por push a um repositório de imagens do Amazon ECR. As compilações da imagem de Docker multiestágio ajudam a reduzir o tamanho da imagem de Docker final. Para obter mais informações, consulte Usar compilações multiestágio com o Docker.

Importante

Executar esta amostra pode resultar em cobranças em sua conta AWS. Isso inclui possíveis cobranças pelo AWS CodeBuild e por recursos da AWS e ações relacionadas ao Amazon S3, ao AWS KMS, ao CloudWatch Logs e ao Amazon ECR. Para obter mais informações, consulte Preços do CodeBuild, Amazon S3 pricing, Definição de preço do AWS Key Management Service, Amazon CloudWatch pricing e Preços do Amazon Elastic Container Registry.

Execute o exemplo “Publicar imagem do Docker no Amazon ECR”

Use o procedimento a seguir para executar o exemplo que publica uma imagem do Docker no Amazon ECR. Para obter mais informações sobre este exemplo, consulte Exemplo “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild.

Como executar este exemplo
  1. Se você já possui um repositório de imagens no Amazon ECR que deseje usar, avance para a etapa 3. Caso contrário, se você estiver utilizando um usuário raiz da AWS, ou um usuário administrador para trabalhar com o Amazon ECR, adicione esta declaração (entre ### BEGIN ADDING STATEMENT HERE ### e ### END ADDING STATEMENT HERE ###) ao usuário (ou ao grupo do IAM ao qual o usuário está associado). O uso de uma conta raiz da AWS não é recomendado. Esta declaração permite a criação de repositórios do Amazon ECR para armazenar imagens do Docker. As elipses (...) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses nas políticas. Para obter mais informações, consulte Working with inline policies using the AWS Management Console no Guia do usuário.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:CreateRepository" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    nota

    A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.

  2. Crie um repositório de imagens no Amazon ECR. Crie o repositório na mesma região da AWS onde você cria seu ambiente de compilação e executa a compilação. Para obter mais informações, consulte Creating a repository no Guia do usuário do Amazon ECR. O nome desse repositório deve corresponder ao nome do repositório que você especificará posteriormente neste procedimento, representado pela variável de ambiente IMAGE_REPO_NAME. Garanta que a política de repositório do Amazon ECR conceda acesso push de imagens para o perfil do IAM do serviço CodeBuild.

  3. Adicione esta declaração (entre ### BEGIN ADDING STATEMENT HERE ### e ### END ADDING STATEMENT HERE ###) à política associada à sua função de serviço do AWS CodeBuild. Essa declaração permite que o CodeBuild faça upload de imagens do Docker para repositórios do Amazon ECR. As elipses (...) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses nas políticas.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:CompleteLayerUpload", "ecr:GetAuthorizationToken", "ecr:InitiateLayerUpload", "ecr:PutImage", "ecr:UploadLayerPart" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    nota

    A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.

  4. Crie os arquivos conforme descrito nas seções Estrutura de diretório e Arquivos deste tópico e faça upload deles em um bucket de entrada do S3 ou em um repositório do AWS CodeCommit, do GitHub ou do Bitbucket. Para obter mais informações, consulte Image definitions file reference no Guia do usuário do AWS CodePipeline.

    Importante

    Não faça upload de (root directory name), apenas dos arquivos dentro de (root directory name).

    Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione (root directory name) ao arquivo ZIP, apenas aos arquivos dentro de (root directory name).

  5. Crie um projeto de compilação, execute a compilação e exiba suas informações.

    Se você usar o console para criar seu projeto:

    1. Para Operating system, selecione Ubuntu.

    2. Em Runtime (Tempo de execução), selecione Standard (Padrão).

    3. Em Imagem, selecione aws/codebuild/standard:5.0.

    4. Adicione as seguintes variáveis de ambiente:

      • AWS_DEFAULT_REGION com o valor region-ID

      • AWS_ACCOUNT_ID com o valor account-ID

      • IMAGE_TAG com o valor Latest

      • IMAGE_REPO_NAME com o valor Amazon-ECR-repo-name

    Se você usar a AWS CLI para criar o projeto de compilação, a entrada em formato JSON para o comando create-project pode ser semelhante a esta. (Substitua os espaços reservados com seus próprios valores.)

    { "name": "sample-docker-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip" }, "artifacts": { "type": "NO_ARTIFACTS" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:5.0", "computeType": "BUILD_GENERAL1_SMALL", "environmentVariables": [ { "name": "AWS_DEFAULT_REGION", "value": "region-ID" }, { "name": "AWS_ACCOUNT_ID", "value": "account-ID" }, { "name": "IMAGE_REPO_NAME", "value": "Amazon-ECR-repo-name" }, { "name": "IMAGE_TAG", "value": "latest" } ], }, "serviceRole": "arn:aws:iam::account-ID:role/role-name", "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID" }
  6. Confirme que o CodeBuild enviou com êxito a imagem do Docker ao repositório:

    1. Abra o console do Amazon ECR em https://console.aws.amazon.com/ecr/

    2. Escolha o nome do repositório. A imagem deve ser listada na coluna Image tag (Tag de imagem)

Estrutura de diretório

Essa amostra pressupõe esta estrutura de diretório.

(root directory name) ├── buildspec.yml └── Dockerfile

Arquivos

Esta amostra usa estes arquivos.

buildspec.yml (em (root directory name))

version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

Dockerfile (em (root directory name))

FROM golang:1.12-alpine AS build #Install git RUN apk add --no-cache git #Get the hello world package from a GitHub repository RUN go get github.com/golang/example/hello WORKDIR /go/src/github.com/golang/example/hello # Build the project and send the output to /bin/HelloWorld RUN go build -o /bin/HelloWorld FROM golang:1.12-alpine #Copy the build's output binary from the previous build container COPY --from=build /bin/HelloWorld /bin/HelloWorld ENTRYPOINT ["/bin/HelloWorld"]
nota

O CodeBuild substitui o ENTRYPOINT para as imagens personalizadas do Docker.

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.