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.
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.
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
Themen
Führen Sie das Beispiel „Docker-Image in Amazon ECR veröffentlichen“ aus
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
So führen Sie das Beispiel aus
-
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
### 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.
-
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. -
Fügen Sie diese Erklärung (zwischen
### BEGIN ADDING STATEMENT HERE ###
und### END ADDING STATEMENT HERE ###
) 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.{ "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.
-
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
hoch, sondern nur die Dateien in(root directory name)
.(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
nicht zur ZIP-Datei hinzu, sondern nur die Dateien in(root directory name)
.(root directory name)
-
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:
-
Wählen Sie für Operating system (Betriebssystem) die Option Ubuntu aus.
-
Wählen Sie unter Runtime (Laufzeit) die Option Standard aus.
-
Wählen Sie für Image: 5.0aws/codebuild/standard.
-
Fügen Sie die folgenden Umgebungsvariablen hinzu:
-
AWS_DEFAULT_REGION mit einem Wert von
region-ID
-
AWS_ACCOUNT_ID mit einem Wert von
account-ID
-
IMAGE_TAG mit dem Wert „Latest (Aktuell)“
-
IMAGE_REPO_NAME 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
" } -
-
Bestätigen Sie, dass das Docker-Image CodeBuild erfolgreich in das Repository übertragen wurde:
-
Öffnen Sie die Amazon ECR-Konsole unter https://console.aws.amazon.com/ecr/
. -
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.