

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Beispiel „Docker-Image in einem Amazon ECR-Image-Repository veröffentlichen“ für CodeBuild
<a name="sample-docker"></a>

Dieses Beispiel erzeugt als Build-Ausgabe ein Docker-Image und überträgt das Docker-Image dann in ein Amazon Elastic Container Registry (Amazon ECR) -Image-Repository. Sie können dieses Beispiel so anpassen, dass das Docker-Image im Docker Hub bereitgestellt wird. Weitere Informationen finden Sie unter [Passen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ an, um es auf Docker Hub zu übertragen](sample-docker-docker-hub.md).

Informationen zum Erstellen eines Docker-Image mit einem benutzerdefinierten Docker Build-Image (`docker:dind` im Docker Hub) finden Sie unter [Docker im benutzerdefinierten Image – Beispiel](sample-docker-custom-image.md).

Dieses Beispiel wurde mit einem Verweis auf `golang:1.12` getestet.

In diesem Beispiel wird die mehrstufige Builds-Funktion von Docker verwendet, durch die ein Docker-Image als Build-Ausgabe produziert wird. Anschließend wird das Docker-Image in ein Amazon ECR-Image-Repository übertragen. Mehrstufige Docker-Image-Builds reduzieren die Größe des endgültigen Docker-Image. Weitere Informationen finden Sie unter [Use multi-stage builds with Docker](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**Wichtig**  
Die Ausführung dieses Beispiels kann dazu führen, dass Ihr Konto belastet wird. AWS Dazu gehören mögliche Gebühren für AWS CodeBuild und für AWS Ressourcen und Aktionen im Zusammenhang mit Amazon S3 AWS KMS, CloudWatch Logs und Amazon ECR. Weitere Informationen finden Sie unter [CodeBuild Preise](https://aws.amazon.com/codebuild/pricing), [Amazon S3 S3-Preise](https://aws.amazon.com/s3/pricing), [AWS Key Management Service Preise](https://aws.amazon.com/kms/pricing), [ CloudWatch Amazon-Preise](https://aws.amazon.com/cloudwatch/pricing) und [Amazon Elastic Container Registry — Preise](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Führen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ aus](#sample-docker-running)
+ [Passen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ an, um es auf Docker Hub zu übertragen](sample-docker-docker-hub.md)

## Führen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ aus
<a name="sample-docker-running"></a>

Gehen Sie wie folgt vor, um das Beispiel auszuführen, das ein Docker-Image in Amazon ECR veröffentlicht. Weitere Informationen zu diesem Beispiel finden Sie unter. [Beispiel „Docker-Image in einem Amazon ECR-Image-Repository veröffentlichen“ für CodeBuild](#sample-docker)

**So führen Sie das Beispiel aus**

1. Wenn Sie bereits über ein Bild-Repository in Amazon ECR verfügen, das Sie verwenden möchten, fahren Sie mit Schritt 3 fort. Andernfalls, wenn Sie einen Benutzer anstelle eines AWS Root-Kontos oder eines Administratorbenutzers für die Arbeit mit Amazon ECR verwenden, fügen Sie diese Anweisung (zwischen *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* und*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) dem Benutzer (oder der IAM-Gruppe, der der Benutzer zugeordnet ist) hinzu. Die Verwendung eines AWS Root-Kontos wird nicht empfohlen. Diese Anweisung ermöglicht die Erstellung von Amazon ECR-Repositorys zum Speichern von Docker-Images. Auslassungspunkte (`...`) werden zur Abkürzung verwendet und weisen auf die Stellen hin, an denen die Anweisung hinzugefügt wird. Entfernen Sie keine Anweisungen und geben Sie die Auslassungspunkte nicht in die Richtlinie ein. *Weitere Informationen finden Sie unter [Arbeiten mit Inline-Richtlinien mithilfe von](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) im Benutzerhandbuch. AWS-Managementkonsole* 

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

****  

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

------
**Anmerkung**  
Die IAM-Entität, die diese Richtlinie ändert, muss in IAM über die Berechtigung zum Ändern von Richtlinien verfügen.

1. Erstellen Sie ein Bild-Repository in Amazon ECR. Stellen Sie sicher, dass Sie das Repository in derselben AWS Region erstellen, in der Sie Ihre Build-Umgebung erstellen und Ihren Build ausführen. Weitere Informationen finden Sie unter [Erstellen eines Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) im *Amazon ECR-Benutzerhandbuch*. Der Name dieses Repositorys muss mit dem Namen des Repositorys übereinstimmen, den Sie zu einem späteren Zeitpunkt in diesem Verfahren festlegen und der durch die `IMAGE_REPO_NAME`-Umgebungsvariable dargestellt wird. Stellen Sie sicher, dass die Amazon ECR-Repository-Richtlinie Image-Push-Zugriff für Ihre CodeBuild Service-IAM-Rolle gewährt. 

1. Fügen Sie diese Erklärung (zwischen *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* und*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) zu der Richtlinie hinzu, die Sie Ihrer AWS CodeBuild Servicerolle zugeordnet haben. Diese Anweisung ermöglicht das Hochladen CodeBuild von Docker-Images in Amazon ECR-Repositorys. Auslassungspunkte (`...`) werden zur Abkürzung verwendet und weisen auf die Stellen hin, an denen die Anweisung hinzugefügt wird. Entfernen Sie keine Anweisungen und geben Sie die Auslassungspunkte nicht in die Richtlinie ein. 

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

****  

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

------
**Anmerkung**  
Die IAM-Entität, die diese Richtlinie ändert, muss in IAM über die Erlaubnis verfügen, Richtlinien zu ändern.

1. Erstellen Sie die Dateien wie in den [Dateien](#sample-docker-files) Abschnitten [Verzeichnisstruktur](#sample-docker-dir) und in diesem Thema beschrieben und laden Sie sie dann in einen S3-Eingabe-Bucket oder ein AWS CodeCommit, GitHub, oder Bitbucket-Repository hoch. Weitere Informationen findest du unter [Referenz zur Datei mit Bilddefinitionen](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) im *AWS CodePipeline Benutzerhandbuch*.
**Wichtig**  
Laden Sie nicht `(root directory name)` hoch, sondern nur die Dateien in `(root directory name)`.   
Wenn Sie einen S3-Empfangs-Bucket verwenden, sollten Sie eine ZIP-Datei erstellen, die die Dateien enthält, und diese dann in den Empfangs-Bucket hochladen. Fügen Sie `(root directory name)` nicht zur ZIP-Datei hinzu, sondern nur die Dateien in `(root directory name)`.

1. Erstellen Sie ein Build-Projekt, führen Sie den Build aus und zeigen Sie die Build-Informationen an.

    Wenn Sie die Konsole verwenden, um Ihr Projekt zu erstellen:

   1.  Wählen Sie für **Operating system (Betriebssystem)** die Option **Ubuntu** aus. 

   1.  Wählen Sie unter **Runtime (Laufzeit)** die Option **Standard** aus. 

   1.  **Wählen Sie für **Image**: 5.0aws/codebuild/standard.** 

   1.  Fügen Sie die folgenden Umgebungsvariablen hinzu: 
      +  AWS\$1DEFAULT\$1REGION mit einem Wert von *region-ID* 
      +  AWS\$1ACCOUNT\$1ID mit einem Wert von *account-ID* 
      +  IMAGE\$1TAG mit dem Wert „Latest (Aktuell)“ 
      +  IMAGE\$1REPO\$1NAME mit einem Wert von *Amazon-ECR-repo-name* 

   Wenn Sie das Build-Projekt AWS CLI mit erstellen, sieht die Eingabe des Befehls im JSON-Format möglicherweise ähnlich aus. `create-project` (Ersetzen Sie die Platzhalter durch Ihre eigenen Werte.)

   ```
   {
     "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. Bestätigen Sie, dass das Docker-Image CodeBuild erfolgreich in das Repository übertragen wurde:

   1. Öffnen Sie die Amazon ECR-Konsole unter [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Wählen Sie den Namen des Repositorys aus. Das Bild muss in der Spalte **Image Tag (Image-Tag)** aufgelistet werden.

### Verzeichnisstruktur
<a name="sample-docker-dir"></a>

In diesem Beispiel wird von dieser Verzeichnisstruktur ausgegangen.

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

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

In diesem Beispiel werden diese Dateien verwendet.

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

**Anmerkung**  
CodeBuild überschreibt die `ENTRYPOINT` für benutzerdefinierte Docker-Images.

# Passen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ an, um es auf Docker Hub zu übertragen
<a name="sample-docker-docker-hub"></a>

Um das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ so anzupassen, dass das Docker-Image an Docker Hub statt an Amazon ECR übertragen wird, bearbeiten Sie den Code des Beispiels. Weitere Informationen zum Beispiel finden Sie unter und. [Beispiel „Docker-Image in einem Amazon ECR-Image-Repository veröffentlichen“ für CodeBuild](sample-docker.md) [Führen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ aus](sample-docker.md#sample-docker-running)
**Anmerkung**  
Wenn Sie eine Version von Docker vor 17.06 verwenden, entfernen Sie die `--no-include-email`-Option.

1. Ersetzen Sie diese Amazon ECR-spezifischen Codezeilen in der `buildspec.yml` Datei:

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

   Durch die folgenden Docker Hub-spezifischen Codezeilen:

   ```
   ...
     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. Laden Sie den bearbeiteten Code in einen S3-Eingabe-Bucket oder ein AWS CodeCommit, GitHub, oder Bitbucket-Repository hoch. 
**Wichtig**  
Laden Sie nicht `(root directory name)` hoch, sondern nur die Dateien in `(root directory name)`.   
Wenn Sie einen S3-Empfangs-Bucket verwenden, sollten Sie eine ZIP-Datei erstellen, die die Dateien enthält, und diese dann in den Empfangs-Bucket hochladen. Fügen Sie `(root directory name)` nicht zur ZIP-Datei hinzu, sondern nur die Dateien in `(root directory name)`.

1. Ersetzen Sie diese Codezeilen aus der JSON-formatierten Eingabe des `create-project`-Befehls:

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

   Durch diese Codezeilen:

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

1. Erstelle eine Build-Umgebung, führe den Build aus und sieh dir die zugehörigen Build-Informationen an.

1. Bestätigen Sie, dass das Docker-Image AWS CodeBuild erfolgreich in das Repository übertragen wurde. Melden Sie sich beim Docker Hub an, wechseln Sie zum Repository wählen Sie die Registerkarte **Tags** aus Das `latest`-Tag sollte einen aktuellen **Last Updated**-Wert enthalten.