

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

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