Exemplo de 'Publicar imagem do Docker em um repositório de ECR imagens da Amazon' para CodeBuild - AWS CodeBuild

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

Esse exemplo produz como saída de compilação uma imagem do Docker e, em seguida, envia a imagem do Docker para um repositório de imagens do Amazon Elastic Container Registry (AmazonECR). Você pode adaptar esta amostra para enviar a imagem Docker para um Docker Hub. Para obter mais informações, consulte Adapte a amostra “Publish Docker image to AmazonECR” 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. Em seguida, ele envia a imagem do Docker para um repositório de ECR imagens da Amazon. 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

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

Execute a amostra “Publicar imagem do Docker na AmazonECR”

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

Como executar este exemplo
  1. Se você já tem um repositório de imagens na Amazon ECR que deseja usar, vá para a etapa 3. Caso contrário, se você estiver usando um usuário em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com a AmazonECR, adicione esta declaração (entre ### BEGIN ADDING STATEMENT HERE ### e ### END ADDING STATEMENT HERE ###) para o usuário (ou IAM grupo ao qual o usuário está associado). Não é recomendável usar uma conta AWS root. Essa declaração permite a criação de ECR repositórios da Amazon 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 IAM entidade que modifica essa política deve ter permissão IAM para modificar as políticas.

  2. Crie um repositório de imagens na AmazonECR. Certifique-se de criar o repositório na mesma AWS região em que você cria seu ambiente de compilação e executa sua compilação. Para obter mais informações, consulte Criação de um repositório no Guia do ECR usuário da Amazon. 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. Certifique-se de que a política de ECR repositório da Amazon conceda acesso push de imagens para sua IAM função CodeBuild de serviço.

  3. Adicione esta declaração (entre ### BEGIN ADDING STATEMENT HERE ### e ### END ADDING STATEMENT HERE ###) à política que você anexou à sua função AWS CodeBuild de serviço. Esta declaração permite CodeBuild fazer o upload de imagens do Docker para os ECR repositórios da Amazon. 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 IAM entidade que modifica essa política deve ter permissão IAM para modificar as políticas.

  4. Crie os arquivos conforme descrito nas Arquivos seções Estrutura de diretório e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 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, certifique-se de criar um ZIP arquivo que contenha os arquivos e, em seguida, carregue-o no bucket de entrada. Não adicione (root directory name) ao ZIP arquivo, apenas os arquivos dentro dele(root directory name).

  5. Crie um projeto de compilação, execute a compilação e visualize as informações da compilação.

    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 um valor de region-ID

      • AWS_ACCOUNT_IDcom um valor de account-ID

      • IMAGE_ TAG com um valor de Latest

      • IMAGE_ REPO _ NAME com um valor de Amazon-ECR-repo-name

    Se você usar o AWS CLI para criar o projeto de construção, a entrada JSON formatada para o create-project comando poderá ser semelhante a essa. (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 se a imagem do Docker foi enviada CodeBuild com sucesso para o repositório:

    1. Abra o ECR console da Amazon 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

CodeBuild substitui as imagens personalizadas do ENTRYPOINT Docker.