Docker-Beispiele 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.

Docker-Beispiele für CodeBuild

Docker im Beispiel eines benutzerdefinierten Images für CodeBuild

In diesem Beispiel wird ein Docker-Image mithilfe eines benutzerdefinierten Docker-Build-Images (docker:dindin Docker Hub) erstellt AWS CodeBuild und ausgeführt.

Informationen dazu, wie Sie ein Docker-Image erstellen, indem Sie stattdessen ein Build-Image verwenden, das von der Docker-Unterstützung bereitgestellt wird CodeBuild , finden Sie in unserer. Docker-Image in einem Amazon ECR-Image-Repository-Beispiel veröffentlichen

Wichtig

Die Ausführung dieses Beispiels kann zu Gebühren für Ihr AWS Konto führen. Dazu gehören mögliche Gebühren für CodeBuild und für AWS Ressourcen und Aktionen im Zusammenhang mit Amazon S3 und CloudWatch Logs. AWS KMS Weitere Informationen finden Sie unter CodeBuild Preise, Amazon S3 S3-Preise, AWS Key Management Service Preise und CloudWatchAmazon-Preise.

Ausführen des Beispiels

So führen Sie das Beispiel aus
  1. Erstellen Sie die Dateien wie in den Abschnitten „Verzeichnisstruktur“ und „Dateien“ dieses Themas beschrieben und laden Sie sie dann 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).

  2. Erstelle ein Build-Projekt, führe den Build aus und sieh dir die zugehörigen Build-Informationen an.

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

    { "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" }
    Anmerkung

    Standardmäßig ist der Docker-Daemon für Nicht-VPC-Builds aktiviert. Wenn Sie Docker-Container für VPC-Builds verwenden möchten, lesen Sie auf der Docker Docs-Website unter Runtime Privilege and Linux Capabilities nach und aktivieren Sie den privilegierten Modus. Außerdem unterstützt Windows den privilegierten Modus nicht.

  3. Zum Anzeigen der Build-Ergebnisse sehen Sie sich die Zeichenfolge Hello, World! im Build-Protokoll an. Weitere Informationen finden Sie unter Anzeigen von Build-Details.

Verzeichnisstruktur

In diesem Beispiel wird von dieser Verzeichnisstruktur ausgegangen.

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

Dateien

Die Basis-Image des Betriebssystems in diesem Beispiel ist Ubuntu. Das Beispiel verwendet diese Dateien.

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"

Zugehörige Ressourcen

Docker-Image in einem Amazon Elastic Container Registry-Image-Repository veröffentlichen — Beispiel 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 (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 Anpassen des Beispiels zur Übertragung des Images zum Docker Hub.

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

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, Amazon S3 S3-Preise, AWS Key Management Service Preise, CloudWatch Amazon-Preise und Amazon Elastic Container Registry — Preise.

Ausführen des Beispiels

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 Administrator-Benutzers für die Arbeit mit Amazon ECR verwenden, fügen Sie diese Anweisung (zwischen ### BEGIN ADDING STATEMENT HERE ### und ### END ADDING STATEMENT HERE ###) 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 im Benutzerhandbuch. AWS Management Console

    { "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 in IAM über die Berechtigung zum Ändern von Richtlinien verfügen.

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

  3. Fügen Sie diese Erklärung (zwischen ### BEGIN ADDING STATEMENT HERE ### und ### END ADDING STATEMENT HERE ###) der Richtlinie hinzu, die Sie Ihrer Servicerolle zugeordnet haben. AWS CodeBuild 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.

    { "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 in IAM über die Erlaubnis verfügen, Richtlinien zu ändern.

  4. Erstellen Sie die Dateien wie in den Abschnitten „Verzeichnisstruktur“ und „Dateien“ dieses Themas 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-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).

  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 für region-ID

      • AWS_ACCOUNT_ID mit einem Wert für account-ID

      • IMAGE_TAG mit dem Wert „Latest (Aktuell)“

      • IMAGE_REPO_NAME mit einem Wert für Amazon-ECR-repo-name

    Wenn Sie das AWS CLI Build-Projekt mit erstellen, sieht die Eingabe des create-project Befehls im JSON-Format möglicherweise ähnlich aus. (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 Amazon ECR-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 das ENTRYPOINT für benutzerdefinierte Docker-Images.

Anpassen des Beispiels zur Übertragung des Images zum Docker Hub

Um das Docker-Image auf Docker Hub statt auf Amazon ECR zu übertragen, bearbeiten Sie den Code dieses Beispiels.

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 ...
  2. 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).

  3. 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" } ] ...
  4. Erstelle eine Build-Umgebung, führe den Build aus und sieh dir die zugehörigen Build-Informationen an.

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

Zugehörige Ressourcen

Private Registrierung mit AWS Secrets Manager Beispiel für CodeBuild

Dieses Beispiel zeigt Ihnen, wie Sie ein Docker-Image, das in einer privaten Registry gespeichert ist, als Ihre AWS CodeBuild Laufzeitumgebung verwenden. Die Anmeldeinformationen für die private Registrierung sind in AWS Secrets Manager gespeichert. Jede private Registrierung funktioniert mit CodeBuild. In diesem Beispiel wird Docker Hub verwendet.

Anmerkung

Geheimnisse sind für Aktionen sichtbar und werden nicht maskiert, wenn sie in eine Datei geschrieben werden.

Anforderungen für ein Beispiel einer privaten Registrierung

Um eine private Registrierung mit verwenden zu können AWS CodeBuild, benötigen Sie Folgendes:

  • Ein Secrets Manager Manager-Geheimnis, das Ihre Docker Hub-Anmeldeinformationen speichert. Die Anmeldeinformationen werden für den Zugriff auf Ihr privates Repository verwendet.

    Anmerkung

    Die von Ihnen erstellten Geheimnisse werden Ihnen in Rechnung gestellt.

  • Ein privates Repository oder Konto.

  • Eine IAM-Richtlinie für eine CodeBuild Servicerolle, die Zugriff auf Ihr Secrets Manager Manager-Geheimnis gewährt.

Gehen Sie wie folgt vor, um diese Ressourcen zu erstellen, und erstellen Sie dann ein CodeBuild Build-Projekt mit den Docker-Images, die in Ihrer privaten Registrierung gespeichert sind.

Erstellen Sie ein CodeBuild Projekt mit einer privaten Registrierung

  1. Weitere Informationen dazu, wie Sie ein kostenloses privates Repository erstellen, finden Sie unter Repositories on Docker Hub Sie können auch die folgenden Befehle in einem Terminal ausführen, um eine Pull-Übertragung eines Images durchzuführen, seine ID abzurufen und es in ein neues Repository zu verschieben.

    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
  2. Folgen Sie den Schritten unter Ein AWS Secrets Manager Geheimnis erstellen im AWS Secrets Manager Benutzerhandbuch.

    1. Wählen Sie in Schritt 3 unter Geheimtyp auswählen die Option Anderer Geheimtyp aus.

    2. Erstellen Sie unter Schlüssel/Wert-Paare ein Schlüssel-Wert-Paar für Ihren Docker Hub-Benutzernamen und ein Schlüssel-Wert-Paar für Ihr Docker Hub-Passwort.

    3. Folgen Sie weiterhin den Schritten unter Create an Secret. AWS Secrets Manager

    4. Deaktivieren Sie sie in Schritt 5 auf der Seite Automatische Rotation konfigurieren, da die Schlüssel Ihren Docker Hub-Anmeldeinformationen entsprechen.

    5. Folgen Sie abschließend den Schritten unter Create an AWS Secrets Manager Secret.

    Weitere Informationen finden Sie unter Was ist AWS Secrets Manager?

  3. Wenn Sie ein AWS CodeBuild Projekt in der Konsole erstellen, CodeBuild hängt es die für Sie erforderlichen Berechtigungen an. Wenn Sie einen anderen AWS KMS Schlüssel als verwendenDefaultEncryptionKey, müssen Sie ihn der Servicerolle hinzufügen. Weitere Informationen finden Sie unter Ändern einer Rolle (Konsole) im IAM-Benutzerhandbuch.

    Damit Ihre Servicerolle mit Secrets Manager funktioniert, muss sie mindestens über die secretsmanager:GetSecretValue entsprechende Berechtigung verfügen.

  4. Um die Konsole für die Erstellung eines Projekts zu verwenden, dessen Umgebung in einer privaten Registrierung gespeichert ist, gehen Sie während der Projekterstellung wie folgt vor: Weitere Informationen finden Sie unter Erstellen Sie ein Build-Projekt (Konsole).

    Anmerkung

    Wenn sich Ihre private Registrierung in Ihrer VPC befindet, muss sie über einen öffentlichen Internetzugang verfügen. CodeBuild kann kein Image von einer privaten IP-Adresse in einer VPC abrufen.

    1. Wählen Sie unter Umgebungsbild die Option Benutzerdefiniertes Bild aus.

    2. Wählen Sie für Environment type (Umgebungsart) die Option Linux oder Windows aus.

    3. Wählen Sie für Image-Registrierung die Option Andere Registrierung aus.

    4. Geben Sie unter Externe Registrierungs-URL den Speicherort des Images und in Registrierungsanmeldedaten — optional den ARN oder den Namen Ihrer Secrets Manager Manager-Anmeldeinformationen ein.

      Anmerkung

      Wenn Ihre Anmeldeinformationen nicht in Ihrer aktuellen Region vorhanden sind, müssen Sie den ARN verwenden. Sie können den Namen der Anmeldeinformationen nicht verwenden, wenn die Anmeldeinformationen in einer anderen Region existieren.