

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á.

# Amostras do Docker para CodeBuild
<a name="sample-docker-section"></a>

Esta seção descreve exemplos de integrações entre Docker e. AWS CodeBuild


| Amostra | Description | 
| --- | --- | 
|  [Docker em amostra de imagem personalizada para CodeBuild](sample-docker-custom-image.md)  |  Este exemplo cria e executa uma imagem do Docker usando CodeBuild uma imagem de compilação personalizada do Docker (`docker:dind`no Docker Hub).   | 
|  [Exemplo de servidor de criação de imagens Docker para CodeBuild](sample-docker-server.md)  |  Esse exemplo transfere as compilações do Docker para um servidor de compilação de imagens gerenciado.   | 
|  [O Windows Docker cria uma amostra para CodeBuild](sample-windows-docker-custom-image.md)  |  Este exemplo cria e executa uma imagem do Windows Docker usando. CodeBuild  | 
|  [Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild](sample-docker.md)  |  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).   | 
|  [Registro privado com AWS Secrets Manager amostra para CodeBuild](sample-private-registry.md)  |  Este exemplo mostra como usar uma imagem do Docker armazenada em um registro privado como seu ambiente CodeBuild de execução.  | 

# Docker em amostra de imagem personalizada para CodeBuild
<a name="sample-docker-custom-image"></a>

O exemplo a seguir cria e executa uma imagem do Docker usando AWS CodeBuild uma imagem de compilação personalizada do Docker (`docker:dind`no Docker Hub). 

Para saber como criar uma imagem do Docker usando uma imagem de construção fornecida CodeBuild com o suporte do Docker, consulte nosso. [Exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md)

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por CodeBuild e por AWS recursos e ações relacionados ao Amazon S3 e CloudWatch aos AWS KMS registros. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços](https://aws.amazon.com/s3/pricing) e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) da [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Executar o Docker no exemplo de imagem personalizada](#sample-docker-custom-image-running)

## Executar o Docker no exemplo de imagem personalizada
<a name="sample-docker-custom-image-running"></a>

Use o procedimento a seguir para executar o Docker em um exemplo de imagem personalizada. Para obter mais informações sobre este exemplo, consulte [Docker em amostra de imagem personalizada para CodeBuild](#sample-docker-custom-image).

**Para executar o Docker no exemplo de imagem personalizada**

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-docker-custom-image-files) seções [Estrutura de diretório](#sample-docker-custom-image-dir) 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 
**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)`.

1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações.

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "sample-docker-custom-image-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerCustomImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "docker:dind",
       "computeType": "BUILD_GENERAL1_SMALL",
       "privilegedMode": false
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```
**nota**  
Por padrão, o daemon do Docker está habilitado para compilações não VPC. Se você quiser usar contêineres do Docker para compilações da VPC, consulte [Privilégio de tempo de execução e funcionalidades do Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site do Docker Docs e ative o modo privilegiado. Além disso, o Windows não é compatível com o modo privilegiado.

1. Para ver os resultados da compilação, procure no log da compilação a string `Hello, World!`. Para obter mais informações, consulte [Visualizar detalhes de compilação](view-build-details.md).

### Estrutura de diretório
<a name="sample-docker-custom-image-dir"></a>

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

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

### Arquivos
<a name="sample-docker-custom-image-files"></a>

A imagem de base do sistema operacional Ubuntu é usada nessa amostra. A amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` (em `(root directory name)`)

```
FROM maven:3.3.9-jdk-8
 
RUN echo "Hello World"
```

# Exemplo de servidor de criação de imagens Docker para CodeBuild
<a name="sample-docker-server"></a>

O exemplo a seguir transfere as compilações do Docker para um servidor de compilação de imagens gerenciado. Você pode adaptar esse exemplo para provisionar um servidor de criação de imagens Docker dedicado e gerenciado na configuração do seu CodeBuild projeto. Observe que a instância provisionada está ativa enquanto as compilações são executadas ativamente para o projeto, e a instância é interrompida quando as compilações não estão em execução. A instância provisionada é armazenada por até um mês antes de ser reciclada. Para obter mais informações, consulte [ CodeBuild Docker Server Capability](https://aws.amazon.com/blogs//aws/accelerate-ci-cd-pipelines-with-the-new-aws-codebuild-docker-server-capability).

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por CodeBuild e por AWS recursos e ações relacionados ao Amazon S3 e CloudWatch aos AWS KMS registros. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços](https://aws.amazon.com/s3/pricing) e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) da [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Configurar um servidor do Docker](#sample-docker-server-running)

## Configurar um servidor do Docker
<a name="sample-docker-server-running"></a>

Use o procedimento a seguir para provisionar um ambiente de computação dedicado para um CodeBuild projeto que gerencia cargas de trabalho do Docker e armazena camadas de imagem do Docker. 

**Como configurar um servidor do Docker**

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-docker-server-files) seções [Estrutura de diretório](#sample-docker-server-dir) 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 
**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)`.

1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações:

   1. Na seção **Ambiente** do console, escolha **Configuração adicional**, acesse **Configuração do servidor do Docker** e selecione **Habilitar servidor do Docker para este projeto**. Depois, você pode escolher o **Tipo de computação do servidor do Docker** e fornecer uma **Credencial do registro**.

   1. Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

      ```
      {
        "name": "sample-docker-custom-image-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/DockerServerSample.zip"
        },
        "artifacts": {
          "type": "NO_ARTIFACTS"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/amazonlinux-x86_64-standard:5.0",
          "computeType": "BUILD_GENERAL1_LARGE",
          "dockerServer": [ 
               { 
                  "computeType": "BUILD_GENERAL1_LARGE",
                  "securityGroupIds": [ "security-groups-ID" ]
               }
            ]
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name"
      }
      ```
**nota**  
Os grupos de segurança configurados para servidores do Docker devem permitir a entrada de tráfego de rede da VPC configurada no projeto. Eles devem permitir a entrada na porta 9876.

1. Para ver os resultados da compilação, procure no log da compilação a string `Hello, World!`. Para obter mais informações, consulte [Visualizar detalhes de compilação](view-build-details.md).

### Estrutura de diretório
<a name="sample-docker-server-dir"></a>

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

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

### Arquivos
<a name="sample-docker-server-files"></a>

A imagem de base do sistema operacional Ubuntu é usada nessa amostra. A amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  build:
    commands:
      - docker buildx build -t helloworld --load .
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` (em `(root directory name)`)

```
FROM public.ecr.aws/amazonlinux/amazonlinux:latest 
 
RUN echo "Hello World"
```

# O Windows Docker cria uma amostra para CodeBuild
<a name="sample-windows-docker-custom-image"></a>

O exemplo a seguir cria e executa uma imagem do Windows Docker usando. CodeBuild

**Topics**
+ [Executar exemplo de compilações do Docker no Windows](#sample-windows-docker-build-running)

## Executar exemplo de compilações do Docker no Windows
<a name="sample-windows-docker-build-running"></a>

Use o procedimento a seguir para executar compilações do Docker no Windows.

**Como executar exemplo de compilações do Docker no Windows**

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-windows-docker-custom-image-files) seções [Estrutura de diretório](#sample-windows-docker-custom-image-dir) 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 
**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)`.

1. Crie uma frota do `WINDOWS_EC2`.

   Se você usar o AWS CLI para criar a frota, a entrada formatada em JSON para o `create-fleet` comando pode ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "fleet-name",
     "baseCapacity": 1,
     "environmentType": "WINDOWS_EC2",
     "computeType": "BUILD_GENERAL1_MEDIUM"
   }
   ```

1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações.

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "project-name",
     "source": {
       "type": "S3",
       "location": "bucket-name/DockerImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "WINDOWS_EC2",
       "image": "Windows",
       "computeType": "BUILD_GENERAL1_MEDIUM",
       "fleet": {
          "fleetArn": "fleet-arn"
       }
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name"
   }
   ```

1. Para ver os resultados da compilação, procure no log da compilação a string `Hello, World!`. Para obter mais informações, consulte [Visualizar detalhes de compilação](view-build-details.md).

### Estrutura de diretório
<a name="sample-windows-docker-custom-image-dir"></a>

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

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

### Arquivos
<a name="sample-windows-docker-custom-image-files"></a>

A imagem de base do sistema operacional usada nesse exemplo é `mcr.microsoft.com/windows/servercore:ltsc2022`. A amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld powershell -Command "Write-Host 'Hello World!'"
```

`Dockerfile` (em `(root directory name)`)

```
FROM mcr.microsoft.com/windows/servercore:ltsc2022

RUN powershell -Command "Write-Host 'Hello World'"
```

# Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild
<a name="sample-docker"></a>

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](sample-docker-docker-hub.md).

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](sample-docker-custom-image.md).

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](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por AWS CodeBuild 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](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços, preços](https://aws.amazon.com/s3/pricing) da Amazon e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) do [Amazon CloudWatch ](https://aws.amazon.com/cloudwatch/pricing) [Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Execute o exemplo “Publicar imagem do Docker no Amazon ECR”](#sample-docker-running)
+ [Adapte o exemplo “Publicar imagem do Docker no Amazon ECR” para enviar para o Docker Hub](sample-docker-docker-hub.md)

## Execute o exemplo “Publicar imagem do Docker no Amazon ECR”
<a name="sample-docker-running"></a>

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 de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild](#sample-docker).

**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 usando um usuário em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com o Amazon ECR, adicione essa declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ao usuário (ou grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta AWS raiz. Essa declaração permite a criação de repositórios 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 Console de gerenciamento da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) no *Guia do usuário*. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:CreateRepository"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

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

1. Crie um repositório de imagens no Amazon ECR. 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 [Creating a repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) 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`. Certifique-se de que a política de repositório do Amazon ECR conceda acesso push de imagens para sua função CodeBuild de serviço IAM. 

1. Adicione essa declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) à política que você anexou à sua função AWS CodeBuild de serviço. Essa declaração permite CodeBuild fazer o upload de imagens do Docker para os 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. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:BatchCheckLayerAvailability",
                   "ecr:CompleteLayerUpload",
                   "ecr:GetAuthorizationToken",
                   "ecr:InitiateLayerUpload",
                   "ecr:PutImage",
                   "ecr:UploadLayerPart"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

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

1. Crie os arquivos conforme descrito nas [Arquivos](#sample-docker-files) seções [Estrutura de diretório](#sample-docker-dir) 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](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) 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)`.

1. 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**. 

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

   1.  **Para **Imagem**, escolha: 5.0aws/codebuild/standard.** 

   1.  Adicione as seguintes variáveis de ambiente: 
      +  AWS\$1DEFAULT\$1REGION com um valor de *region-ID* 
      +  AWS\$1ACCOUNT\$1ID com um valor de *account-ID* 
      +  IMAGE\$1TAG com o valor Latest 
      +  IMAGE\$1REPO\$1NAME com um valor de *Amazon-ECR-repo-name* 

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON 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"
   }
   ```

1. Confirme se a imagem do Docker foi enviada CodeBuild com sucesso para o repositório:

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

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

### Estrutura de diretório
<a name="sample-docker-dir"></a>

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

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

### Arquivos
<a name="sample-docker-files"></a>

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.

# Adapte o exemplo “Publicar imagem do Docker no Amazon ECR” para enviar para o Docker Hub
<a name="sample-docker-docker-hub"></a>

Para adaptar o exemplo “Publicar imagem do Docker no Amazon ECR” de modo que a imagem do Docker seja enviada ao Docker Hub e não ao Amazon ECR, edite o código do exemplo. Para obter mais informações sobre o exemplo, consulte [Exemplo de “Publicar imagem do Docker em um repositório de imagens do Amazon ECR” para CodeBuild](sample-docker.md) e [Execute o exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md#sample-docker-running).
**nota**  
Se você estiver usando uma versão do Docker anterior à 17.06, remova a opção `--no-include-email`.

1. Substitua estas linhas de código específicas do Amazon ECR no arquivo `buildspec.yml`:

   ```
   ...
     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
   ...
   ```

   Por estas linhas de código específicas no Docker Hub:

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Docker Hub...
         # Type the command to log in to your Docker Hub account here.          
     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 $IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

1. Faça o upload do código editado em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**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)`.

1. Substitua estas linhas de código da entrada formatada JSON para o comando `create-project`:

   ```
   ...
       "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"
         }
       ]
   ...
   ```

   Por estas linhas de código:

   ```
   ...
       "environmentVariables": [
         {
           "name": "IMAGE_REPO_NAME",
           "value": "your-Docker-Hub-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

1. Crie um ambiente de compilação, execute a compilação e exiba informações relacionadas.

1. Confirme se a imagem do Docker foi enviada AWS CodeBuild com sucesso para o repositório. Faça login no Docker Hub, vá até o repositório e selecione a guia **Tags**. A tag `latest` deve conter um valor **Last Updated** bem recente.

# Registro privado com AWS Secrets Manager amostra para CodeBuild
<a name="sample-private-registry"></a>

 Este exemplo mostra como usar uma imagem do Docker armazenada em um registro privado como seu ambiente AWS CodeBuild de execução. As credenciais para o registro privado são armazenadas no AWS Secrets Manager. Qualquer registro privado funciona com CodeBuild. Esse exemplo usa o Docker Hub. 

**nota**  
Os segredos são visíveis para ações e não são mascarados quando gravados em um arquivo.

**Topics**
+ [Requisitos do exemplo do registro privado](#sample-private-registry-requirements)
+ [Crie um CodeBuild projeto com um registro privado](private-registry-sample-create-project.md)
+ [Configurar uma credencial de registro privada para executores auto-hospedados](private-registry-sample-configure-runners.md)

## Requisitos do exemplo do registro privado
<a name="sample-private-registry-requirements"></a>

 Para usar um registro privado com AWS CodeBuild, você deve ter o seguinte: 
+  Um segredo do Secrets Manager que armazena suas credenciais do Docker Hub. As credenciais são usados para acessar seu repositório privado. 
**nota**  
Você será cobrado pelos segredos criados.
+  Um repositório ou conta privada. 
+  Uma política do IAM de função de CodeBuild serviço que concede acesso ao seu segredo do Secrets Manager. 

 Siga estas etapas para criar esses recursos e, em seguida, criar um projeto de CodeBuild compilação usando as imagens do Docker armazenadas em seu registro privado. 

# Crie um CodeBuild projeto com um registro privado
<a name="private-registry-sample-create-project"></a>

1. Para obter informações sobre como criar um repositório privado gratuito, consulte [repositórios no Docker Hub](https://docs.docker.com/docker-hub/repos/). Você também pode executar os comandos a seguir em um terminal para extrair uma imagem, obter seu ID e enviá-la a um novo repositório. 

   ```
   docker pull amazonlinux
   docker images amazonlinux --format {{.ID}}
   docker tag image-id your-username/repository-name:tag
   docker login
   docker push your-username/repository-name
   ```

1.  Siga as etapas em [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) no *Guia do AWS Secrets Manager usuário*.

   

   1.  Na etapa 3, em **Escolher tipo de segredo**, selecione **Outro tipo de segredo**. 

   1. Em **Chave/valor do segredo**, crie um par de chave/valor para o nome de usuário do Docker Hub e um par de chave/valor para a senha do Docker Hub. 

   1.  Continue seguindo as etapas em [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

   1.  Na etapa 5, na página **Configurar alternância automática**, desative-a porque as chaves correspondem às credenciais do Docker Hub. 

   1.  Conclua seguindo as etapas em [Criar um AWS Secrets Manager segredo](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

    Para ter mais informações, consulte [O que é o AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 

1.  Quando você cria um AWS CodeBuild projeto no console, CodeBuild anexa a permissão necessária para você. Se você usar uma AWS KMS chave diferente de`DefaultEncryptionKey`, deverá adicioná-la à função de serviço. Para obter mais informações, consulte [Modifying a role (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html#roles-managingrole-editing-console) no *Guia do usuário do IAM*. 

    Para que o perfil de serviço funcione com o Secrets Manager, ele deverá ter, no mínimo, a permissão `secretsmanager:GetSecretValue`.   
![\[A configuração do perfil de serviço.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  Para usar o console para criar um projeto com um ambiente armazenado em um registro privado, faça o seguinte enquanto você cria um projeto. Para mais informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console). 
**nota**  
 Se seu registro privado estiver em sua VPC, ele deverá ter acesso público à Internet. CodeBuild não é possível extrair uma imagem de um endereço IP privado em uma VPC. 

   1.  Em **Imagem de ambiente**, selecione **Imagem personalizada**. 

   1.  Para **Environment type (Tipo de ambiente)**, selecione **Linux** ou **Windows**. 

   1.  Em **Registro de imagens**, selecione **Outro registro**. 

   1.  Em **URL de registro externo**, insira o local da imagem e, em **Credencial do registro: opcional**, insira o ARN ou o nome das credenciais do Secrets Manager.
**nota**  
 Se as suas credenciais não existirem em sua região atual, será necessário usar o ARN. Não será possível usar o nome da credencial se as credenciais existirem em uma região diferente. 

# Configurar uma credencial de registro privada para executores auto-hospedados
<a name="private-registry-sample-configure-runners"></a>

Use as instruções apresentadas a seguir para configurar uma credencial de registro para um executor auto-hospedado.

**nota**  
Observe que essas credenciais só serão usadas se as imagens forem substituídas pelas de registros privados. 

------
#### [ AWS Management Console ]

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação ou selecione um já existente. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Alterar configurações de um projeto de compilação (console)](change-project.md#change-project-console).

1.  Em **Ambiente**, escolha **Configuração adicional**. 

1.  Em **Configuração adicional**, insira o nome ou ARN do formulário secreto AWS Secrets Manager para a **credencial do Registro** - opcional.  
![\[A configuração da credencial do registro.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/registry-credential.png)

------
#### [ AWS CLI ]

1. Se você quiser criar um projeto, execute o comando **create-project**.

   ```
   aws codebuild create-project \
       --name project-name \
       --source type=source-type,location=source-location \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn},imagePullCredentialsType=CODEBUILD|SERVICE_ROLE" \
       --artifacts type=artifacts-type \
       --service-role arn:aws:iam::account-ID:role/service-role/service-role-name
   ```

1. Se você quiser atualizar um projeto já existente, execute o comando **update-project**.

   ```
   aws codebuild update-project \
       --name project-name \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn}"
   ```

------