Exemple « Publier une image Docker dans un référentiel d'ECRimages Amazon » pour CodeBuild - AWS CodeBuild

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemple « Publier une image Docker dans un référentiel d'ECRimages Amazon » pour CodeBuild

Cet exemple produit une image Docker en tant que sortie de compilation, puis envoie l'image Docker vers un référentiel d'images Amazon Elastic Container Registry (AmazonECR). Vous pouvez adapter cet exemple pour transférer l'image Docker vers Docker Hub. Pour de plus amples informations, veuillez consulter Adaptez l'exemple « Publier une image Docker sur Amazon ECR » pour le transférer vers Docker Hub.

Pour savoir comment générer une image Docker à l'aide d'une image de génération Docker personnalisée (docker:dind dans Docker Hub), consultez notre Exemple Docker dans une image personnalisée.

Cet exemple a été testé en faisant référence à golang:1.12.

Cet exemple utilise la nouvelle fonction de générations Docker en plusieurs étapes, qui produit une image Docker comme sortie de génération. Il envoie ensuite l'image Docker vers un référentiel d'ECRimages Amazon. Les générations d'image Docker en plusieurs étapes contribuent à réduire la taille de l'image Docker finale. Pour plus d'informations, consultez Use multi-stage builds with Docker.

Important

L'exécution de cet échantillon peut entraîner des frais sur votre AWS compte. Cela inclut les éventuels frais pour AWS CodeBuild et pour les AWS ressources et les actions liées à Amazon S3 AWS KMS, CloudWatch Logs et AmazonECR. Pour plus d'informations, consultez CodeBuild les rubriques Tarification, Tarification Amazon S3, AWS Key Management Service Tarification Amazon et CloudWatch Tarification Amazon Elastic Container Registry.

Exécutez l'exemple « Publier une image Docker sur Amazon ECR »

Utilisez la procédure suivante pour exécuter l'exemple qui publie une image Docker sur AmazonECR. Pour plus d'informations sur cet exemple, consultez. Exemple « Publier une image Docker dans un référentiel d'ECRimages Amazon » pour CodeBuild

Pour exécuter cet exemple
  1. Si vous avez déjà un référentiel d'images sur Amazon que ECR vous souhaitez utiliser, passez à l'étape 3. Sinon, si vous utilisez un utilisateur au lieu d'un compte AWS root ou un utilisateur administrateur pour travailler avec AmazonECR, ajoutez cette déclaration (entre ### BEGIN ADDING STATEMENT HERE ### and ### END ADDING STATEMENT HERE ###) à l'utilisateur (ou au IAM groupe auquel l'utilisateur est associé). L'utilisation d'un compte AWS root n'est pas recommandée. Cette déclaration permet la création de ECR référentiels Amazon pour le stockage d'images Docker. Des ellipses (...) sont utilisées par souci de concision et pour vous aider à déterminer l'endroit où ajouter l'instruction. Ne supprimez aucune instruction, et n'entrez pas ces ellipses dans la stratégie. Pour plus d'informations, consultez la section Utilisation des politiques intégrées à l'aide du AWS Management Console guide de l'utilisateur.

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

    L'IAMentité qui modifie cette politique doit être autorisée IAM à modifier les politiques.

  2. Créez un référentiel d'images sur AmazonECR. Assurez-vous de créer le référentiel dans la même AWS région que celle dans laquelle vous créez votre environnement de génération et exécutez votre build. Pour plus d'informations, consultez la section Création d'un référentiel dans le guide de ECR l'utilisateur Amazon. Le nom de ce référentiel doit correspondre au nom du référentiel que vous spécifierez ultérieurement dans cette procédure, représenté par la variable d'environnement IMAGE_REPO_NAME. Assurez-vous que la politique de ECR dépôt Amazon accorde un accès push aux images pour votre IAM rôle CodeBuild de service.

  3. Ajoutez cette déclaration (entre ### BEGIN ADDING STATEMENT HERE ### and ### END ADDING STATEMENT HERE ###) à la politique que vous avez attachée à votre rôle AWS CodeBuild de service. Cette déclaration permet de CodeBuild télécharger des images Docker dans les ECR référentiels Amazon. Des ellipses (...) sont utilisées par souci de concision et pour vous aider à déterminer l'endroit où ajouter l'instruction. Ne supprimez aucune instruction, et n'entrez pas ces ellipses dans la stratégie.

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

    L'IAMentité qui modifie cette politique doit être autorisée IAM à modifier les politiques.

  4. Créez les fichiers comme décrit dans les Dépôt de sections Structure de répertoire et de cette rubrique, puis chargez-les dans un compartiment d'entrée S3 ou un AWS CodeCommit référentiel Bitbucket. GitHub Pour plus d'informations, reportez-vous à la section Référence des fichiers de définitions d'images dans le Guide de AWS CodePipeline l'utilisateur.

    Important

    Ne chargez pas (root directory name), mais seulement les fichiers à l'intérieur de (root directory name).

    Si vous utilisez un compartiment d'entrée S3, veillez à créer un ZIP fichier contenant les fichiers, puis à le télécharger dans le compartiment d'entrée. N'ajoutez rien (root directory name) au ZIP fichier, mais uniquement les fichiers qu'il contient(root directory name).

  5. Créez un projet de build, exécutez le build et consultez les informations de build.

    Si vous utilisez la console pour créer votre projet :

    1. Pour Système d'exploitation, choisissez Ubuntu.

    2. Pour Runtime (Exécution), sélectionnez Standard.

    3. Pour Image, choisissez aws/codebuild/standard:5.0.

    4. Ajoutez les variables d'environnement suivantes :

      • AWS_ DEFAULT _ REGION avec une valeur de region-ID

      • AWS_ACCOUNT_IDavec une valeur de account-ID

      • IMAGE_ TAG avec la valeur Latest

      • IMAGE_ REPO _ NAME avec une valeur de Amazon-ECR-repo-name

    Si vous utilisez le AWS CLI pour créer le projet de construction, l'entrée JSON formatée de la create-project commande peut ressembler à ceci. (Remplacez les espaces réservés par vos propres valeurs.)

    { "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. Confirmez que CodeBuild l'image Docker a bien été transférée vers le référentiel :

    1. Ouvrez la ECR console Amazon à l'adresse https://console.aws.amazon.com/ecr/.

    2. Choisissez le nom du référentiel. L'image doit apparaître dans la colonne Balise d'image.

Structure de répertoire

Cet exemple suppose que cette structure de répertoire est utilisée.

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

Dépôt de

Cet exemple utilise ces fichiers.

buildspec.yml (dans (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 (dans (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"]
Note

CodeBuild remplace le ENTRYPOINT pour les images Docker personnalisées.