

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esempi Docker per CodeBuild
<a name="sample-docker-section"></a>

Questa sezione descrive esempi di integrazioni tra Docker e. AWS CodeBuild


| Project N.E.M.O. | Description | 
| --- | --- | 
|  [Docker in un esempio di immagine personalizzato per CodeBuild](sample-docker-custom-image.md)  |  Questo esempio crea ed esegue un'immagine Docker utilizzando CodeBuild un'immagine di build Docker personalizzata (`docker:dind`in Docker Hub).   | 
|  [Esempio di server di creazione di immagini Docker per CodeBuild](sample-docker-server.md)  |  Questo esempio scarica le build Docker su un server di creazione di immagini gestito.   | 
|  [Windows Docker crea un esempio per CodeBuild](sample-windows-docker-custom-image.md)  |  Questo esempio crea ed esegue un'immagine Windows Docker utilizzando. CodeBuild  | 
|  [Esempio di «Pubblica immagine Docker in un archivio di immagini Amazon ECR» per CodeBuild](sample-docker.md)  |  Questo esempio produce come output di build un'immagine Docker e quindi invia l'immagine Docker a un repository di immagini Amazon Elastic Container Registry (Amazon ECR).   | 
|  [Registro privato con Gestione dei segreti AWS esempio per CodeBuild](sample-private-registry.md)  |  Questo esempio mostra come utilizzare un'immagine Docker archiviata in un registro privato come ambiente di runtime. CodeBuild   | 

# Docker in un esempio di immagine personalizzato per CodeBuild
<a name="sample-docker-custom-image"></a>

L'esempio seguente crea ed esegue un'immagine Docker utilizzando AWS CodeBuild un'immagine di build Docker personalizzata (`docker:dind`in Docker Hub). 

Per scoprire come creare un'immagine Docker utilizzando invece un'immagine di build fornita CodeBuild con il supporto Docker, consulta il nostro. [Esempio «Pubblica immagine Docker su Amazon ECR'](sample-docker.md)

**Importante**  
L'esecuzione di questo esempio potrebbe comportare addebiti sul tuo AWS account. Questi includono eventuali addebiti per CodeBuild e per AWS risorse e azioni relative ad Amazon S3 e AWS KMS CloudWatch Logs. Per ulteriori informazioni, consulta [CodeBuild i prezzi, i prezzi](https://aws.amazon.com/codebuild/pricing) di [Amazon S3, i prezzi](https://aws.amazon.com/s3/pricing) e [AWS Key Management Service i prezzi](https://aws.amazon.com/kms/pricing) di [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Esegui Docker in un esempio di immagine personalizzato](#sample-docker-custom-image-running)

## Esegui Docker in un esempio di immagine personalizzato
<a name="sample-docker-custom-image-running"></a>

Usa la seguente procedura per eseguire il Docker in un esempio di immagine personalizzato. Per ulteriori informazioni su questo esempio, vedere[Docker in un esempio di immagine personalizzato per CodeBuild](#sample-docker-custom-image).

**Per eseguire Docker in un esempio di immagine personalizzato**

1. Crea i file come descritto nelle [File](#sample-docker-custom-image-files) sezioni [Struttura delle directory](#sample-docker-custom-image-dir) e di questo argomento, quindi caricali in un bucket di input S3 o in un repository AWS CodeCommit GitHub, o Bitbucket. 
**Importante**  
Non caricare `(root directory name)`, ma solo i file all'interno di `(root directory name)`   
Se si sta utilizzando un bucket di input S3, assicurarsi di creare un file ZIP contenente i file, quindi caricarlo nel bucket di input. Non aggiungere `(root directory name)` al file ZIP, ma solo i file all'interno di `(root directory name)`

1. Crea un progetto di compilazione, esegui la build e visualizza le relative informazioni sulla build.

   Se usi il AWS CLI per creare il progetto di compilazione, l'input in formato JSON del `create-project` comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).

   ```
   {
     "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**  
Per impostazione predefinita, il daemon Docker è abilitato per le build non VPC. Se desideri utilizzare i contenitori Docker per le build VPC, [consulta Runtime Privilege e Linux Capabilities sul sito Web di Docker Docs e](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) abilita la modalità privilegiata. Inoltre, Windows non supporta la modalità privilegiata.

1. Per vedere i risultati della compilazione, cercare la stringa `Hello, World!` nel log di compilazione. Per ulteriori informazioni, consulta [Visualizzazione dei dettagli delle compilazioni](view-build-details.md).

### Struttura delle directory
<a name="sample-docker-custom-image-dir"></a>

Questo esempio assume la seguente struttura delle directory.

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

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

L'immagine di base del sistema operativo utilizzata in questo esempio è di Ubuntu. L'esempio utilizza i seguenti file.

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

# Esempio di server di creazione di immagini Docker per CodeBuild
<a name="sample-docker-server"></a>

L'esempio seguente scarica le build Docker su un server di creazione di immagini gestito. Puoi adattare questo esempio per fornire un server di creazione di immagini Docker dedicato e gestito nella configurazione del tuo progetto. CodeBuild Tieni presente che l'istanza fornita è attiva mentre le build vengono eseguite attivamente per il progetto e viene interrotta quando le build non sono in esecuzione. L'istanza fornita viene archiviata per un massimo di un mese prima di essere riciclata. Per ulteriori informazioni, consulta [ CodeBuild Docker](https://aws.amazon.com/blogs//aws/accelerate-ci-cd-pipelines-with-the-new-aws-codebuild-docker-server-capability) Server Capability.

**Importante**  
L'esecuzione di questo esempio potrebbe comportare addebiti sul tuo AWS account. Questi includono eventuali addebiti per CodeBuild e per AWS risorse e azioni relative ad Amazon S3 e AWS KMS CloudWatch Logs. Per ulteriori informazioni, consulta [CodeBuild i prezzi, i prezzi](https://aws.amazon.com/codebuild/pricing) di [Amazon S3, i prezzi](https://aws.amazon.com/s3/pricing) e [AWS Key Management Service i prezzi](https://aws.amazon.com/kms/pricing) di [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Configura un server Docker](#sample-docker-server-running)

## Configura un server Docker
<a name="sample-docker-server-running"></a>

Utilizza la seguente procedura per fornire un ambiente di calcolo dedicato per un CodeBuild progetto che gestisce i carichi di lavoro Docker e archivia i livelli di immagine Docker. 

**Per configurare un server Docker**

1. Crea i file come descritto nelle [File](#sample-docker-server-files) sezioni [Struttura delle directory](#sample-docker-server-dir) e di questo argomento, quindi caricali in un bucket di input S3 o in un repository AWS CodeCommit GitHub, o Bitbucket. 
**Importante**  
Non caricare `(root directory name)`, ma solo i file all'interno di `(root directory name)`   
Se si sta utilizzando un bucket di input S3, assicurarsi di creare un file ZIP contenente i file, quindi caricarlo nel bucket di input. Non aggiungere `(root directory name)` al file ZIP, ma solo i file all'interno di `(root directory name)`

1. Crea un progetto di compilazione, esegui la build e visualizza le relative informazioni sulla build:

   1. Nella sezione **Ambiente** della console, scegli **Configurazione aggiuntiva, vai alla configurazione** **del server Docker**, quindi seleziona **Abilita il server docker per** questo progetto. **Puoi quindi scegliere il **tipo di elaborazione del server Docker** e fornire una credenziale di registro.**

   1. Se si utilizza il AWS CLI per creare il progetto di compilazione, l'input in formato JSON del comando potrebbe essere simile a questo. `create-project` (Sostituire i segnaposto con i propri valori).

      ```
      {
        "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**  
I gruppi di sicurezza configurati per i server Docker dovrebbero consentire il traffico di rete in ingresso dal VPC configurato nel progetto. Dovrebbero consentire l'ingresso sulla porta 9876.

1. Per vedere i risultati della compilazione, cercare la stringa `Hello, World!` nel log di compilazione. Per ulteriori informazioni, consulta [Visualizzazione dei dettagli delle compilazioni](view-build-details.md).

### Struttura delle directory
<a name="sample-docker-server-dir"></a>

Questo esempio assume la seguente struttura delle directory.

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

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

L'immagine di base del sistema operativo utilizzata in questo esempio è di Ubuntu. L'esempio utilizza i seguenti file.

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

# Windows Docker crea un esempio per CodeBuild
<a name="sample-windows-docker-custom-image"></a>

L'esempio seguente crea ed esegue un'immagine di Windows Docker utilizzando. CodeBuild

**Topics**
+ [Esempio di build di Esegui Windows Docker](#sample-windows-docker-build-running)

## Esempio di build di Esegui Windows Docker
<a name="sample-windows-docker-build-running"></a>

Utilizzare la procedura seguente per eseguire le build di Windows Docker.

**Per eseguire le build di Windows Docker, esempio**

1. Crea i file come descritto nelle [File](#sample-windows-docker-custom-image-files) sezioni [Struttura delle directory](#sample-windows-docker-custom-image-dir) e di questo argomento, quindi caricali in un bucket di input S3 o in un repository AWS CodeCommit GitHub, o Bitbucket. 
**Importante**  
Non caricare `(root directory name)`, ma solo i file all'interno di `(root directory name)`   
Se si sta utilizzando un bucket di input S3, assicurarsi di creare un file ZIP contenente i file, quindi caricarlo nel bucket di input. Non aggiungere `(root directory name)` al file ZIP, ma solo i file all'interno di `(root directory name)`

1. Crea una flotta. `WINDOWS_EC2`

   Se usi il AWS CLI per creare la flotta, l'input in formato JSON del `create-fleet` comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).

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

1. Crea un progetto di compilazione, esegui la build e visualizza le informazioni relative alla build.

   Se usi il AWS CLI per creare il progetto di compilazione, l'input in formato JSON del `create-project` comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).

   ```
   {
     "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. Per vedere i risultati della compilazione, cercare la stringa `Hello, World!` nel log di compilazione. Per ulteriori informazioni, consulta [Visualizzazione dei dettagli delle compilazioni](view-build-details.md).

### Struttura delle directory
<a name="sample-windows-docker-custom-image-dir"></a>

Questo esempio assume la seguente struttura delle directory.

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

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

L'immagine di base del sistema operativo utilizzato in questo esempio è. `mcr.microsoft.com/windows/servercore:ltsc2022` L'esempio utilizza i seguenti file.

`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'"
```

# Esempio di «Pubblica immagine Docker in un archivio di immagini Amazon ECR» per CodeBuild
<a name="sample-docker"></a>

Questo esempio produce come output di build un'immagine Docker e quindi invia l'immagine Docker a un repository di immagini Amazon Elastic Container Registry (Amazon ECR). Questo esempio può essere modificato per inviare l'immagine Docker a Docker Hub. Per ulteriori informazioni, consulta [Adatta l'esempio «Pubblica immagine Docker su Amazon ECR' per inviarlo a Docker Hub](sample-docker-docker-hub.md).

Per imparare a compilare un'immagine Docker utilizzando un'immagine Docker di compilazione personalizzata, (`docker:dind` in Docker Hub), consulta [Docker in un esempio di immagine personalizzata](sample-docker-custom-image.md).

Questo esempio è stato testato sulla base di `golang:1.12`.

Questo esempio utilizza la nuova funzione di compilazioni Docker a più fasi, che produce un'immagine Docker come output della compilazione. Quindi invia l'immagine Docker a un repository di immagini Amazon ECR. Le compilazioni di immagini Docker a più fasi aiutano a ridurre la dimensione dell'immagine Docker finale. Per ulteriori informazioni, consultare la pagina relativa all'[utilizzo di compilazioni a più fasi con Docker](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**Importante**  
L'esecuzione di questo esempio potrebbe comportare addebiti sul tuo account. AWS Questi includono possibili addebiti per AWS CodeBuild e per AWS risorse e azioni relative ad Amazon S3 AWS KMS, CloudWatch Logs e Amazon ECR. Per ulteriori informazioni, consulta [CodeBuild i prezzi, i prezzi](https://aws.amazon.com/codebuild/pricing) di [Amazon S3, i prezzi, i AWS Key Management Service](https://aws.amazon.com/s3/pricing) [prezzi](https://aws.amazon.com/kms/pricing) di [Amazon e CloudWatch i prezzi](https://aws.amazon.com/cloudwatch/pricing) di [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Esegui l'esempio «Pubblica immagine Docker su Amazon ECR'](#sample-docker-running)
+ [Adatta l'esempio «Pubblica immagine Docker su Amazon ECR' per inviarlo a Docker Hub](sample-docker-docker-hub.md)

## Esegui l'esempio «Pubblica immagine Docker su Amazon ECR'
<a name="sample-docker-running"></a>

Utilizza la procedura seguente per eseguire l'esempio che pubblica un'immagine Docker su Amazon ECR. Per ulteriori informazioni su questo esempio, consulta. [Esempio di «Pubblica immagine Docker in un archivio di immagini Amazon ECR» per CodeBuild](#sample-docker)

**Per eseguire questo esempio**

1. Se disponi già di un repository di immagini in Amazon ECR che desideri utilizzare, vai al passaggio 3. Altrimenti, se utilizzi un utente anziché un account AWS root o un utente amministratore per lavorare con Amazon ECR, aggiungi questa istruzione (tra *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) all'utente (o al gruppo IAM a cui è associato l'utente). L'utilizzo di un account AWS root non è consigliato. Questa istruzione consente la creazione di repository Amazon ECR per l'archiviazione di immagini Docker. Le ellissi (`...`) vengono utilizzate per brevità e per aiutare i clienti a individuare il punto in cui aggiungere l'istruzione. Non rimuovere nessuna istruzione e non digitare queste ellissi nella policy. *Per ulteriori informazioni, consulta [Working with inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) using the in the user Guide. Console di gestione AWS* 

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

****  

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

------
**Nota**  
L'entità IAM che modifica questa policy deve avere l'autorizzazione in IAM a modificare le policy.

1. Crea un archivio di immagini in Amazon ECR. Assicurati di creare il repository nella stessa AWS regione in cui crei l'ambiente di compilazione ed esegui la build. Per ulteriori informazioni, consulta [Creazione di un repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) nella *Amazon ECR User Guide.* Il nome di questo repository deve essere uguale a quello che viene specificato più avanti in questa procedura, rappresentato dalla variabile di ambiente `IMAGE_REPO_NAME`. Assicurati che la policy del repository Amazon ECR conceda l'accesso tramite push alle immagini per il tuo ruolo IAM di CodeBuild servizio. 

1. Aggiungi questa dichiarazione (tra *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) alla policy che hai allegato al tuo AWS CodeBuild ruolo di servizio. Questa dichiarazione consente di CodeBuild caricare immagini Docker negli archivi Amazon ECR. Le ellissi (`...`) vengono utilizzate per brevità e per aiutare i clienti a individuare il punto in cui aggiungere l'istruzione. Non rimuovere nessuna istruzione e non digitare queste ellissi nella policy. 

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

****  

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

------
**Nota**  
L'entità IAM che modifica questa policy deve avere l'autorizzazione in IAM per modificare le policy.

1. Crea i file come descritto nelle [File](#sample-docker-files) sezioni [Struttura delle directory](#sample-docker-dir) e di questo argomento, quindi caricali in un bucket di input S3 o in un repository AWS CodeCommit GitHub, o Bitbucket. *Per ulteriori informazioni, consulta il [riferimento al file delle definizioni delle immagini](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) nella Guida per l'utente.AWS CodePipeline *
**Importante**  
Non caricare `(root directory name)`, ma solo i file all'interno di `(root directory name)`   
Se si sta utilizzando un bucket di input S3, assicurarsi di creare un file ZIP contenente i file, quindi caricarlo nel bucket di input. Non aggiungere `(root directory name)` al file ZIP, ma solo i file all'interno di `(root directory name)`

1. Crea un progetto di compilazione, esegui la build e visualizza le informazioni sulla build.

    Se utilizzi la console per creare il progetto:

   1.  In **Operating system** (Sistema operativo), seleziona **Ubuntu**. 

   1.  In **Runtime**, seleziona **Standard**. 

   1.  **Per **Image**, scegliere:5.0aws/codebuild/standard.** 

   1.  Aggiungere le seguenti variabili di ambiente: 
      +  AWS\$1DEFAULT\$1REGION con un valore di *region-ID* 
      +  AWS\$1ACCOUNT\$1ID con un valore di *account-ID* 
      +  IMAGE\$1TAG con un valore di Latest 
      +  IMAGE\$1REPO\$1NAME con un valore di *Amazon-ECR-repo-name* 

   Se si utilizza il AWS CLI per creare il progetto di compilazione, l'input in formato JSON del comando potrebbe avere un aspetto simile a questo. `create-project` (Sostituire i segnaposto con i propri valori).

   ```
   {
     "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. Conferma di aver CodeBuild inviato correttamente l'immagine Docker al repository:

   1. Apri la console Amazon ECR all'indirizzo [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Selezionare il nome del repository L'immagine deve essere elencata nella colonna **Tag immagine**.

### Struttura delle directory
<a name="sample-docker-dir"></a>

Questo esempio assume la seguente struttura delle directory.

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

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

Questo esempio utilizza i seguenti file.

`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 sostituisce le immagini Docker `ENTRYPOINT` personalizzate.

# Adatta l'esempio «Pubblica immagine Docker su Amazon ECR' per inviarlo a Docker Hub
<a name="sample-docker-docker-hub"></a>

Per adattare l'esempio 'Publish Docker image to Amazon ECR' in modo che l'immagine Docker venga inviata a Docker Hub anziché ad Amazon ECR, modifica il codice dell'esempio. Per ulteriori informazioni sull'esempio, consulta e. [Esempio di «Pubblica immagine Docker in un archivio di immagini Amazon ECR» per CodeBuild](sample-docker.md) [Esegui l'esempio «Pubblica immagine Docker su Amazon ECR'](sample-docker.md#sample-docker-running)
**Nota**  
Se si utilizza una versione di Docker precedente alla 17.06, rimuovere l'opzione `--no-include-email`.

1. Sostituisci queste righe di codice specifiche di Amazon ECRS nel `buildspec.yml` file:

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

   con queste righe di codice specifiche di 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. Carica il codice modificato in un bucket di input S3 o in un repository AWS CodeCommit GitHub, o Bitbucket. 
**Importante**  
Non caricare `(root directory name)`, ma solo i file all'interno di `(root directory name)`   
Se si sta utilizzando un bucket di input S3, assicurarsi di creare un file ZIP contenente i file, quindi caricarlo nel bucket di input. Non aggiungere `(root directory name)` al file ZIP, ma solo i file all'interno di `(root directory name)`

1. Sostituire queste righe di codice dall'input in formato JSON al 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"
         }
       ]
   ...
   ```

   con queste righe di codice:

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

1. Crea un ambiente di compilazione, esegui la build e visualizza le informazioni relative alla build.

1. Conferma di AWS CodeBuild aver inviato correttamente l'immagine Docker al repository. Accedere a Docker Hub, andare nel repository e selezionare la scheda **Tags (Tag)**. Il tag `latest` dovrebbe contenere un valore di **Last Updated (Ultimo aggiornamento)** molto recente.

# Registro privato con Gestione dei segreti AWS esempio per CodeBuild
<a name="sample-private-registry"></a>

 Questo esempio mostra come utilizzare un'immagine Docker archiviata in un registro privato come ambiente AWS CodeBuild di runtime. Le credenziali del registro privato sono archiviate in Gestione dei segreti AWS. Qualsiasi registro privato funziona con CodeBuild. Questo esempio si basa su Docker Hub. 

**Nota**  
I segreti sono visibili alle azioni e non vengono mascherati quando vengono scritti su un file.

**Topics**
+ [Requisiti per un esempio di registro privato](#sample-private-registry-requirements)
+ [Crea un CodeBuild progetto con un registro privato](private-registry-sample-create-project.md)
+ [Configura una credenziale di registro privata per i corridori ospitati autonomamente](private-registry-sample-configure-runners.md)

## Requisiti per un esempio di registro privato
<a name="sample-private-registry-requirements"></a>

 Per utilizzare un registro privato con AWS CodeBuild, è necessario disporre di quanto segue: 
+  Un segreto di Secrets Manager che memorizza le credenziali del Docker Hub. Le credenziali vengono utilizzate per accedere al repository privato. 
**Nota**  
Ti verranno addebitati i segreti che crei.
+  Un repository o un account privato. 
+  Una policy IAM relativa ai ruoli di CodeBuild servizio che concede l'accesso al segreto di Secrets Manager. 

 Segui questi passaggi per creare queste risorse e quindi creare un progetto di CodeBuild compilazione utilizzando le immagini Docker archiviate nel tuo registro privato. 

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

1. Per informazioni su come creare un repository privato gratuito, consulta la pagina relativa ai [repository su Docker Hub](https://docs.docker.com/docker-hub/repos/). Puoi anche eseguire i seguenti comandi in un terminale per estrarre un'immagine, ottenerne l'ID e inserirla in un nuovo repository. 

   ```
   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.  Segui la procedura descritta in [Creare un Gestione dei segreti AWS segreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) nella *Guida Gestione dei segreti AWS per l'utente*.

   

   1.  Nel passaggio 3, in **Scegli il tipo di segreto**, scegli **Altro tipo di segreto**. 

   1. Nelle **coppie chiave/valore**, crea una coppia chiave-valore per il nome utente di Docker Hub e una coppia chiave-valore per la password di Docker Hub. 

   1.  [Continua a seguire i passaggi descritti in Creare un segreto. Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) 

   1.  Nel passaggio 5, nella pagina **Configura rotazione automatica**, disattivala perché le chiavi corrispondono alle credenziali del tuo Docker Hub. 

   1.  Completa la procedura descritta in [Creare un Gestione dei segreti AWS segreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

    Per maggiori informazioni, consulta [Che cos’è Gestione dei segreti AWS?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 

1.  Quando crei un AWS CodeBuild progetto nella console, CodeBuild assegna l'autorizzazione richiesta. Se si utilizza una AWS KMS chiave diversa da`DefaultEncryptionKey`, è necessario aggiungerla al ruolo di servizio. Per ulteriori informazioni, consulta [Modificare un ruolo (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html#roles-managingrole-editing-console) nella *Guida per l'utente IAM*. 

    Affinché il ruolo di servizio funzioni con Secrets Manager, deve disporre almeno dell'`secretsmanager:GetSecretValue`autorizzazione.   
![\[La configurazione del ruolo di servizio.\]](http://docs.aws.amazon.com/it_it/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  Per utilizzare la console per la creazione di un progetto in un ambiente archiviato in un registro privato, esegui la seguente procedura durante l'operazione. Per informazioni, consulta [Creare un progetto di compilazione (console)](create-project.md#create-project-console). 
**Nota**  
 Se il registro privato si trova nel tuo VPC, deve disporre di un accesso pubblico a Internet. CodeBuild non è possibile estrarre un'immagine da un indirizzo IP privato in un VPC. 

   1.  In **Immagine dell'ambiente**, scegli **Immagine personalizzata**. 

   1.  In **Environment type (Tipo ambiente)**, seleziona **Linux** o **Windows**. 

   1.  Per **Registro delle immagini**, scegli **Altro registro**. 

   1.  In **URL di registro esterno**, inserisci la posizione dell'immagine e in **Credenziali di registro (facoltativo)** inserisci l'ARN o il nome delle tue credenziali di Secrets Manager.
**Nota**  
 Se le credenziali non esistono nella regione corrente, devi utilizzare l'ARN. Non puoi utilizzare il nome delle credenziali se esistono in un'altra regione. 

# Configura una credenziale di registro privata per i corridori ospitati autonomamente
<a name="private-registry-sample-configure-runners"></a>

Usa le seguenti istruzioni per configurare una credenziale di registro per un runner ospitato autonomamente.

**Nota**  
Tieni presente che queste credenziali verranno utilizzate solo se le immagini vengono sostituite con quelle dei registri privati. 

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

1. [Apri la console su codebuild/home. AWS CodeBuild https://console.aws.amazon.com/codesuite/](https://console.aws.amazon.com/codesuite/codebuild/home)

1. Crea un progetto di compilazione o seleziona un progetto esistente. Per informazioni, consulta [Creare un progetto di compilazione (console)](create-project.md#create-project-console) e [Modifica delle impostazioni di un progetto di compilazione (console)](change-project.md#change-project-console).

1.  In **Ambiente**, scegli **Configurazione aggiuntiva**. 

1.  In **Configurazione aggiuntiva**, immettere il nome o l'ARN del codice segreto Gestione dei segreti AWS per la **credenziale del Registro** di sistema (facoltativo).  
![\[La configurazione delle credenziali del registro.\]](http://docs.aws.amazon.com/it_it/codebuild/latest/userguide/images/registry-credential.png)

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

1. Se desideri creare un nuovo progetto, esegui il 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 desideri aggiornare un progetto esistente, esegui il 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}"
   ```

------