

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejemplos de Docker para CodeBuild
<a name="sample-docker-section"></a>

En esta sección se describen ejemplos de integraciones entre Docker y. AWS CodeBuild


| Muestra | Description (Descripción) | 
| --- | --- | 
|  [Docker en una muestra de imagen personalizada para CodeBuild](sample-docker-custom-image.md)  |  En este ejemplo, se crea y ejecuta una imagen de Docker mediante CodeBuild una imagen de compilación de Docker personalizada (`docker:dind`en Docker Hub).   | 
|  [Ejemplo de servidor de creación de imágenes de Docker para CodeBuild](sample-docker-server.md)  |  En este ejemplo, se transfieren compilaciones de Docker a un servidor de compilación de imágenes administrado.   | 
|  [Ejemplo de compilación de Windows Docker para CodeBuild](sample-windows-docker-custom-image.md)  |  En este ejemplo, se crea y ejecuta una imagen de Docker de Windows mediante. CodeBuild  | 
|  [Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild](sample-docker.md)  |  Este ejemplo produce como salida de la compilación una imagen de Docker y la inserta después en un repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR).   | 
|  [Registro privado con AWS Secrets Manager muestra para CodeBuild](sample-private-registry.md)  |  En este ejemplo, se muestra cómo utilizar una imagen de Docker almacenada en un registro privado como entorno de CodeBuild ejecución.  | 

# Docker en una muestra de imagen personalizada para CodeBuild
<a name="sample-docker-custom-image"></a>

En el siguiente ejemplo, se crea y ejecuta una imagen de Docker mediante AWS CodeBuild una imagen de compilación de Docker personalizada (`docker:dind`en Docker Hub). 

Para aprender a crear una imagen de Docker utilizando en su lugar una imagen de compilación proporcionada por CodeBuild el soporte de Docker, consulta nuestra. [Ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md)

**importante**  
Si ejecutas este ejemplo, es posible que se te cobren cargos en tu cuenta. AWS Estos incluyen posibles cargos por CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 y CloudWatch Logs. AWS KMS Para obtener más información, consulte [CodeBuild precios](https://aws.amazon.com/codebuild/pricing), [precios de Amazon S3](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) y [ CloudWatchprecios de Amazon](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Ejecución del ejemplo de Docker en una imagen personalizada](#sample-docker-custom-image-running)

## Ejecución del ejemplo de Docker en una imagen personalizada
<a name="sample-docker-custom-image-running"></a>

Utilice el siguiente procedimiento para ejecutar el ejemplo de Docker en una imagen personalizada. Para obtener más información sobre este ejemplo, consulte [Docker en una muestra de imagen personalizada para CodeBuild](#sample-docker-custom-image).

**Para ejecutar el ejemplo de Docker en una imagen personalizada**

1. Cree los archivos tal y como se describe en las [Archivos](#sample-docker-custom-image-files) secciones [Estructura de directorios](#sample-docker-custom-image-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit repositorio de Bitbucket. GitHub 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada.

   Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios 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**  
De forma predeterminada, el daemon de Docker está habilitado para compilaciones sin VPC. Si quiere usar contenedores de Docker para las compilaciones de VPC, consulte [Runtime Privilege and Linux Capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker Docs y habilite el modo privilegiado. Además, Windows no admite el modo privilegiado.

1. Para ver los resultados de compilación, busque en el log de la compilación la cadena `Hello, World!` Para obtener más información, consulte [Ver detalles de las compilaciones](view-build-details.md).

### Estructura de directorios
<a name="sample-docker-custom-image-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

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

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

La imagen base del sistema operativo utilizado en este ejemplo es Ubuntu. El ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(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` (in `(root directory name)`)

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

# Ejemplo de servidor de creación de imágenes de Docker para CodeBuild
<a name="sample-docker-server"></a>

En el ejemplo siguiente se transfieren compilaciones de Docker a un servidor de compilación de imágenes administrado. Puede adaptar este ejemplo para aprovisionar un servidor de creación de imágenes de Docker dedicado y administrado en la configuración de su proyecto. CodeBuild Ten en cuenta que la instancia aprovisionada está activa mientras las compilaciones se ejecutan activamente para el proyecto, y la instancia se detiene cuando las compilaciones no se están ejecutando. La instancia aprovisionada se almacena durante un mes como máximo antes de reciclarla. Para obtener más información, consulte Capacidad [del servidor CodeBuild Docker](https://aws.amazon.com/blogs//aws/accelerate-ci-cd-pipelines-with-the-new-aws-codebuild-docker-server-capability).

**importante**  
Si ejecuta este ejemplo, es posible que se le cobren cargos a su AWS cuenta. Estos incluyen posibles cargos por CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 y CloudWatch Logs. AWS KMS Para obtener más información, consulte [CodeBuild precios](https://aws.amazon.com/codebuild/pricing), [precios de Amazon S3](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) y [ CloudWatchprecios de Amazon](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Configuración de un servidor de Docker](#sample-docker-server-running)

## Configuración de un servidor de Docker
<a name="sample-docker-server-running"></a>

Utilice el siguiente procedimiento para aprovisionar un entorno informático dedicado a un CodeBuild proyecto que administre las cargas de trabajo de Docker y almacene las capas de imágenes de Docker. 

**Cómo configurar un servidor de Docker**

1. Cree los archivos tal y como se describe en las [Archivos](#sample-docker-server-files) secciones [Estructura de directorios](#sample-docker-server-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un repositorio AWS CodeCommit de GitHub Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada:

   1. En la sección **Entorno** de la consola, elija **Configuración adicional**, vaya a **Configuración del servidor Docker** y, a continuación, seleccione **Habilitar servidor de Docker para este proyecto**. A continuación, puede elegir **Tipo de computación del servidor de Docker** y proporcione una **Credencial de registro**.

   1. Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios 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**  
Los grupos de seguridad configurados para servidores Docker deben permitir la entrada de tráfico de red desde la VPC configurada en el proyecto. Deberían permitir la entrada por el puerto 9876.

1. Para ver los resultados de compilación, busque en el log de la compilación la cadena `Hello, World!` Para obtener más información, consulte [Ver detalles de las compilaciones](view-build-details.md).

### Estructura de directorios
<a name="sample-docker-server-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

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

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

La imagen base del sistema operativo utilizado en este ejemplo es Ubuntu. El ejemplo usa los siguientes archivos.

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

```
version: 0.2

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

`Dockerfile` (in `(root directory name)`)

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

# Ejemplo de compilación de Windows Docker para CodeBuild
<a name="sample-windows-docker-custom-image"></a>

En el siguiente ejemplo, se crea y ejecuta una imagen de Docker de Windows mediante. CodeBuild

**Topics**
+ [Ejecución del ejemplo de compilación de Windows Docker](#sample-windows-docker-build-running)

## Ejecución del ejemplo de compilación de Windows Docker
<a name="sample-windows-docker-build-running"></a>

Utilice el siguiente procedimiento para ejecutar las compilaciones de Windows Docker.

**Cómo ejecutar el ejemplo de compilaciones de Windows Docker**

1. Cree los archivos tal y como se describe en las [Archivos](#sample-windows-docker-custom-image-files) secciones [Estructura de directorios](#sample-windows-docker-custom-image-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree una flota de `WINDOWS_EC2`.

   Si utilizas el AWS CLI para crear la flota, la entrada con formato JSON del `create-fleet` comando podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

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

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada.

   Si utilizas la AWS CLI para crear el proyecto de compilación, la entrada con formato JSON del `create-project` comando podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios 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 los resultados de compilación, busque en el log de la compilación la cadena `Hello, World!` Para obtener más información, consulte [Ver detalles de las compilaciones](view-build-details.md).

### Estructura de directorios
<a name="sample-windows-docker-custom-image-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

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

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

La imagen base del sistema operativo utilizado en este ejemplo es `mcr.microsoft.com/windows/servercore:ltsc2022`. El ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(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` (in `(root directory name)`)

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

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

# Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild
<a name="sample-docker"></a>

Este ejemplo produce como salida de la compilación una imagen de Docker y la inserta después en un repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR). Puede adaptar este ejemplo para insertar la imagen de Docker en Docker Hub. Para obtener más información, consulte [Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub](sample-docker-docker-hub.md).

Para obtener información acerca de cómo crear una imagen de Docker utilizando una imagen de compilación de Docker personalizada (`docker:dind` en Docker Hub), consulte nuestro [Ejemplo de Docker en una imagen personalizada](sample-docker-custom-image.md).

Este ejemplo se ha probado con `golang:1.12`.

Utiliza la nueva característica de fases múltiples de Docker, que produce una imagen de Docker como salida de la compilación. A continuación, envía la imagen de Docker a un repositorio de imágenes de Amazon ECR. Las compilaciones de imágenes de fases múltiples de Docker ayudan a reducir el tamaño de la imagen de Docker final. Para obtener más información, consulte [Use multi-stage builds with Docker](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**importante**  
La ejecución de este ejemplo podría generar cargos en su cuenta. AWS Estos incluyen posibles cargos por AWS CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 AWS KMS, CloudWatch Logs y Amazon ECR. Para obtener más información, consulte [CodeBuild los precios, precios](https://aws.amazon.com/codebuild/pricing) de [Amazon S3, precios](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) de [Amazon y CloudWatch precios](https://aws.amazon.com/cloudwatch/pricing) de [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR](#sample-docker-running)
+ [Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub](sample-docker-docker-hub.md)

## Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR
<a name="sample-docker-running"></a>

Utilice el siguiente procedimiento para ejecutar el ejemplo que publica una imagen de Docker en Amazon ECR. Para obtener más información sobre este ejemplo, consulte [Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild](#sample-docker).

**Para ejecutar este ejemplo**

1. Si ya tiene un repositorio de imágenes en Amazon ECR que desee utilizar, vaya al paso 3. De lo contrario, si utiliza un usuario en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con Amazon ECR, añada esta declaración (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* y*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda usar una cuenta AWS root. Esta declaración permite la creación de repositorios de Amazon ECR para almacenar imágenes de Docker. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política. Para obtener más información, consulte el artículo relacionado con el [uso de políticas integradas a través de la Consola de administración de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) en la *Guía del usuario*. 

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

****  

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

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

1. Cree un repositorio de imágenes en Amazon ECR. Asegúrese de crear el repositorio en la misma AWS región en la que creó y ejecutó el entorno de compilación. Para obtener más información, consulte [Crear un repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la *Guía del usuario de Amazon ECR*. El nombre del repositorio debe coincidir con el que especificará más adelante en este procedimiento, representado por la variable de entorno `IMAGE_REPO_NAME`. Asegúrese de que la política de repositorios de Amazon ECR conceda acceso push de imágenes para su función de IAM CodeBuild de servicio. 

1. Añada esta declaración (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* y*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) a la política que asoció a su función de AWS CodeBuild servicio. Esta declaración permite cargar imágenes de Docker CodeBuild a los repositorios de Amazon ECR. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política. 

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

****  

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

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

1. Cree los archivos tal y como se describe en las [Archivos](#sample-docker-files) secciones [Estructura de directorios](#sample-docker-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un repositorio AWS CodeCommit de GitHub Bitbucket. Para obtener más información, consulte [Referencia del archivo de definiciones de imágenes](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) en la *Guía del usuario de AWS CodePipeline *.
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación.

    Si utiliza la consola para crear un proyecto:

   1.  En **Operating system (Sistema operativo)**, elija **Ubuntu**. 

   1.  En **Runtime**, elija **Standard (Estándar)**. 

   1.  **En **Imagen, selecciona**: 5.0. aws/codebuild/standard** 

   1.  Añada las siguientes variables de entorno: 
      +  AWS\$1DEFAULT\$1REGION con un valor de *region-ID* 
      +  AWS\$1ACCOUNT\$1ID con un valor de *account-ID* 
      +  IMAGE\$1TAG con un valor de Latest 
      +  IMAGE\$1REPO\$1NAME con un valor de *Amazon-ECR-repo-name* 

   Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del comando con formato JSON podría tener un aspecto similar al siguiente. `create-project` (Sustituya los marcadores de posición por sus propios 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. Confirma que la imagen de Docker se insertó CodeBuild correctamente en el repositorio:

   1. Abra la consola Amazon ECR en [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Elija el nombre del repositorio. La imagen debe mostrarse en la columna **Image tag (Etiqueta de imagen)**.

### Estructura de directorios
<a name="sample-docker-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

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

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

Este ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(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` (in `(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 anula las imágenes `ENTRYPOINT` de Docker personalizadas.

# Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub
<a name="sample-docker-docker-hub"></a>

Para adaptar el ejemplo de publicación de una imagen de Docker en Amazon ECR de modo que la imagen de Docker se inserte en Docker Hub en lugar de en Amazon ECR, edite el código del ejemplo. Para obtener más información sobre el ejemplo, consulte [Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild](sample-docker.md) y [Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md#sample-docker-running).
**nota**  
Si está utilizando una versión de Docker anterior a la 17.06, quite la opción `--no-include-email`.

1. Sustituya estas líneas de código específicas de Amazon ECR en el archivo `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 líneas de código específicas de 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. Sube el código editado a un depósito de entrada de S3 o a un AWS CodeCommit repositorio GitHub de Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Sustituya estas líneas de código de la entrada con formato JSON del 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 líneas de código:

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

1. Cree un entorno de compilación, ejecute la compilación y vea la información de compilación relacionada.

1. Confirma que la imagen de Docker se insertó AWS CodeBuild correctamente en el repositorio. Inicie sesión en Docker Hub, vaya al repositorio y elija la pestaña **Tags**. La etiqueta `latest` debe contener un valor de **Last Updated** muy reciente.

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

 En este ejemplo, se muestra cómo utilizar una imagen de Docker almacenada en un registro privado como entorno AWS CodeBuild de ejecución. Las credenciales del registro privado están almacenadas en AWS Secrets Manager. Cualquier registro privado funciona con CodeBuild. En esta muestra se utiliza Docker Hub. 

**nota**  
Los secretos son visibles para las acciones y no se ocultan cuando se escriben en un archivo.

**Topics**
+ [Requisitos del ejemplo de un registro privado](#sample-private-registry-requirements)
+ [Crea un CodeBuild proyecto con un registro privado](private-registry-sample-create-project.md)
+ [Configuración de una credencial de registro privada para ejecutores autoalojados](private-registry-sample-configure-runners.md)

## Requisitos del ejemplo de un registro privado
<a name="sample-private-registry-requirements"></a>

 Para usar un registro privado con AWS CodeBuild, debe tener lo siguiente: 
+  Un secreto de Secrets Manager que almacena sus credenciales de Docker Hub. Las credenciales se utilizan para acceder al repositorio privado. 
**nota**  
Se le cobrará por los secretos que cree.
+  Un repositorio privado o una cuenta. 
+  Una política de IAM de rol de CodeBuild servicio que otorga acceso a tu secreto de Secrets Manager. 

 Siga estos pasos para crear estos recursos y, a continuación, cree un proyecto de CodeBuild compilación con las imágenes de Docker almacenadas en su registro privado. 

# Crea un CodeBuild proyecto con un registro privado
<a name="private-registry-sample-create-project"></a>

1. Para obtener información sobre cómo crear un repositorio privado gratuito, consulte [Repositorios en Docker Hub](https://docs.docker.com/docker-hub/repos/). También puede ejecutar los siguientes comandos en un terminal para extraer una imagen, obtener su ID y enviarla a un nuevo repositorio. 

   ```
   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 los pasos que se indican en [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la *Guía del AWS Secrets Manager usuario*.

   

   1.  En el paso 3, en **Elija tipo de secreto**, seleccione **Otro tipo de secreto**. 

   1. En **Pares clave/valor**, cree un par clave-valor para el nombre de usuario de Docker Hub y otro par clave-valor para la contraseña de Docker Hub. 

   1.  Sigue los pasos de [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

   1.  En el paso 5, en la página **Configurar la rotación automática**, desactívala porque las claves corresponden a sus credenciales de Docker Hub. 

   1.  Termina de seguir los pasos de [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

    Para obtener más información, consulte [¿Qué es AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 

1.  Cuando creas un AWS CodeBuild proyecto en la consola, te CodeBuild adjunta el permiso necesario. Si usa una AWS KMS clave que no sea`DefaultEncryptionKey`, debe agregarla al rol de servicio. Para obtener más información, consulte [Modificación de un rol (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html#roles-managingrole-editing-console) en la *Guía del usuario de IAM*. 

    Para que su rol de servicio funcione con Secrets Manager, debe tener, como mínimo, el permiso `secretsmanager:GetSecretValue`.   
![\[La configuración del rol de servicio\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  Para usar la consola para crear un proyecto con un entorno almacenado en un registro privado, haga lo siguiente mientras crea un proyecto. Para obtener información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console). 
**nota**  
 Si su registro privado está en su VPC, debe tener acceso público a Internet. CodeBuild no puede extraer una imagen de una dirección IP privada en una VPC. 

   1.  En **Imagen de entorno**, elija **Imagen personalizada**. 

   1.  En **Environment type (Tipo de entorno)**, elija **Linux** o **Windows**. 

   1.  En **Registro de imágenes**, elija **Otro registro**. 

   1.  En **URL de registro externa**, introduzca la ubicación de la imagen y en **Credencial de registro (opcional)**, introduzca el ARN o el nombre de sus credenciales de Secrets Manager.
**nota**  
 Si las credenciales no existen en la región actual, debe usar el ARN. No puede utilizar el nombre de la credencial si las credenciales existen en otra región. 

# Configuración de una credencial de registro privada para ejecutores autoalojados
<a name="private-registry-sample-configure-runners"></a>

Utilice las siguientes instrucciones para configurar una credencial de registro para un ejecutor autoalojado.

**nota**  
Tenga en cuenta que esta credencial solo se utilizará si las imágenes se sustituyen por las de registros privados. 

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

1. Abra la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación o seleccione uno existente. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Cambiar la configuración de un proyecto de compilación (consola)](change-project.md#change-project-console).

1.  En **Entorno**, elija **Configuración adicional**. 

1.  En **Configuración adicional**, introduzca el nombre o el ARN del secreto de la **credencial AWS Secrets Manager de registro** (opcional).  
![\[La configuración de credenciales de registro.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/registry-credential.png)

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

1. Si desea crear un proyecto nuevo, ejecute el 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. Si desea actualizar un proyecto existente, ejecuta el 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}"
   ```

------