Beispiel für „Docker-Image in einem ECR Amazon-Image-Repository veröffentlichen“ für CodeBuild - AWS CodeBuild

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 für „Docker-Image in einem ECR Amazon-Image-Repository veröffentlichen“ für CodeBuild

Dieses Beispiel erzeugt als Build-Ausgabe ein Docker-Image und überträgt das Docker-Image dann in ein Amazon Elastic Container Registry (AmazonECR) -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 auf Amazon veröffentlichenECR“ an, um es auf Docker Hub zu übertragen.

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.

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 ECR Amazon-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.

Wichtig

Die Ausführung dieses Beispiels kann dazu führen, dass Ihr AWS Konto belastet wird. 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 AmazonECR. Weitere Informationen finden Sie unter CodeBuild Preise, Amazon S3 S3-Preise, AWS Key Management Service Preise, CloudWatch Amazon-Preise und Amazon Elastic Container Registry — Preise.

Führen Sie das Beispiel „Docker-Image auf Amazon ECR veröffentlichen“ aus

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

So führen Sie das Beispiel aus
  1. Wenn Sie bereits über ein Bild-Repository in Amazon verfügen, das ECR Sie verwenden möchten, fahren Sie mit Schritt 3 fort. Andernfalls, wenn Sie einen Benutzer anstelle eines AWS Root-Kontos oder eines Administrator-Benutzers für die Arbeit mit Amazon verwendenECR, fügen Sie diese Aussage hinzu (zwischen ### BEGIN ADDING STATEMENT HERE ### and ### END ADDING STATEMENT HERE ###) für den Benutzer (oder die IAM Gruppe, der der Benutzer zugeordnet ist). Die Verwendung eines AWS Root-Kontos wird nicht empfohlen. Diese Anweisung ermöglicht die Erstellung von ECR Amazon-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 im AWS Management Console Benutzerhandbuch.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:CreateRepository" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    Anmerkung

    Die IAM Entität, die diese Richtlinie ändert, muss berechtigt sein, Richtlinien IAM zu ändern.

  2. Erstellen Sie ein Bild-Repository in AmazonECR. 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 im ECRAmazon-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 ECR Amazon-Repository-Richtlinie Image-Push-Zugriff für Ihre CodeBuild IAM Servicerolle gewährt.

  3. Fügen Sie diese Aussage hinzu (zwischen ### BEGIN ADDING STATEMENT HERE ### and ### END ADDING STATEMENT HERE ###) zu der Richtlinie, die Sie Ihrer AWS CodeBuild Servicerolle hinzugefügt haben. Diese Anweisung ermöglicht das Hochladen CodeBuild von Docker-Images in ECR Amazon-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.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:CompleteLayerUpload", "ecr:GetAuthorizationToken", "ecr:InitiateLayerUpload", "ecr:PutImage", "ecr:UploadLayerPart" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    Anmerkung

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

  4. Erstellen Sie die Dateien wie in den Dateien Abschnitten Verzeichnisstruktur 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 im AWS CodePipeline Benutzerhandbuch.

    Wichtig

    Laden Sie nicht (root directory name) hoch, sondern nur die Dateien in (root directory name).

    Wenn Sie einen S3-Eingabe-Bucket verwenden, stellen Sie sicher, dass Sie eine ZIP Datei erstellen, die die Dateien enthält, und laden Sie sie dann in den Eingabe-Bucket hoch. Fügen Sie der ZIP Datei nichts (root directory name) hinzu, sondern nur die darin enthaltenen Dateien(root directory name).

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

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

    3. Wählen Sie für Image (Abbild) die Option aws/codebuild/standard:5.0 aus.

    4. Fügen Sie die folgenden Umgebungsvariablen hinzu:

      • AWS_ DEFAULT _ REGION mit einem Wert von region-ID

      • AWS_ACCOUNT_IDmit einem Wert von account-ID

      • IMAGE_ TAG mit dem Wert Latest

      • IMAGE_ REPO _ NAME mit einem Wert von Amazon-ECR-repo-name

    Wenn Sie das AWS CLI Build-Projekt mit dem erstellen, könnte die JSON -formatierte Eingabe für den create-project Befehl etwa so aussehen. (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" }
  6. Bestätigen Sie, dass das Docker-Image CodeBuild erfolgreich in das Repository übertragen wurde:

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

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

Verzeichnisstruktur

In diesem Beispiel wird von dieser Verzeichnisstruktur ausgegangen.

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

Dateien

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.