の「Docker イメージを Amazon ECRイメージリポジトリに公開する」サンプル CodeBuild - AWS CodeBuild

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

の「Docker イメージを Amazon ECRイメージリポジトリに公開する」サンプル CodeBuild

このサンプルでは、ビルド出力として Docker イメージを生成し、その Docker イメージを Amazon Elastic Container Registry (Amazon ECR) イメージリポジトリにプッシュします。このサンプルを適応させて、Docker イメージを Docker Hub にプッシュすることができます。詳細については、「「Docker イメージを Amazon ' ECRサンプルに公開して Docker Hub にプッシュする」」を参照してください。

カスタム Docker ビルドイメージ (Docker Hub の docker:dind) を使用して Docker イメージをビルドする方法については、「カスタム Docker イメージのサンプル」を参照してください。

このサンプルは、golang:1.12 を参照してテストされています。

このサンプルでは、新しいマルチステージの Docker ビルド機能を使用しています。この機能により、Docker イメージがビルド出力として生成されます。次に、Docker イメージを Amazon ECRイメージリポジトリにプッシュします。マルチステージの Docker イメージビルドは、最終的な Docker イメージのサイズを縮小するのに役立ちます。詳細については、「Docker でのマルチステージビルドの使用」を参照してください。

重要

このサンプルを実行すると、 AWS アカウントに料金が発生する可能性があります。これには、Amazon S3 AWS CodeBuild 、、 CloudWatch Logs AWS KMS、および Amazon に関連する AWS リソースとアクションに対して発生する可能性のある料金が含まれますECR。詳細については、CodeBuild 「 の料金」、Amazon S3 の料金」、AWS Key Management Service 「 の料金」、「Amazon の CloudWatch 料金」、「Amazon Elastic Container Registry の料金」を参照してください。

「Docker イメージを Amazon に公開するECR」サンプルを実行する

Amazon に Docker イメージを発行するサンプルを実行するには、次の手順に従いますECR。このサンプルの詳細については、「」を参照してくださいの「Docker イメージを Amazon ECRイメージリポジトリに公開する」サンプル CodeBuild

このサンプルを実行するには
  1. ECR 使用するイメージリポジトリが Amazon にすでにある場合は、ステップ 3 に進みます。それ以外の場合、 AWS ルートアカウントまたは管理者ユーザーの代わりに ユーザーを使用して Amazon を操作する場合はECR、このステートメントを ( ### BEGIN ADDING STATEMENT HERE ### また、### END ADDING STATEMENT HERE ###) をユーザー (またはユーザーが関連付けられているIAMグループ) に。 AWS ルートアカウントの使用はお勧めしません。このステートメントでは、Docker イメージを保存するための Amazon ECRリポジトリを作成できます。省略記号 (...) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号をポリシーに入力しないでください。詳細については、ユーザーガイドの「AWS Management Consoleでのインラインポリシーの使用」を参照してください。

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

    このポリシーを変更するIAMエンティティには、ポリシーを変更するアクセス許可が IAMにある必要があります。

  2. Amazon でイメージリポジトリを作成しますECR。リポジトリは、ビルド環境を作成してビルドを実行するのと同じ AWS リージョンに作成してください。詳細については、「Amazon ユーザーガイド」の「リポジトリの作成」を参照してください。 ECR このリポジトリの名前は、この手順で後ほど IMAGE_REPO_NAME 環境変数を使用して指定するリポジトリ名と一致させる必要があります。Amazon ECRリポジトリポリシーがサービスIAMロールに CodeBuildイメージプッシュアクセスを許可していることを確認します。

  3. このステートメントを ( の間に ### BEGIN ADDING STATEMENT HERE ### また、### END ADDING STATEMENT HERE ###) を AWS CodeBuild サービスロールにアタッチしたポリシーに。このステートメントにより、 CodeBuild は Docker イメージを Amazon ECR リポジトリにアップロードできます。省略記号 (...) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号をポリシーに入力しないでください。

    { "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" }
    注記

    このポリシーを変更するIAMエンティティには、ポリシーを変更するアクセス許可が IAMにある必要があります。

  4. このトピックの ディレクトリ構造および ファイルセクションで説明されているようにファイルを作成し、S3 入力バケット、 AWS CodeCommit、 GitHubまたは Bitbucket リポジトリにアップロードします。詳細については、「AWS CodePipeline ユーザーガイド」の「イメージ定義ファイルのリファレンス」を参照してください。

    重要

    (root directory name) をアップロードしないでください。アップロードするのは、(root directory name) 内のファイルのみです。

    S3 入力バケットを使用している場合は、ZIPファイルを含むファイルを作成し、入力バケットにアップロードしてください。ファイル(root directory name)には を追加せずZIP、 内のファイルのみを追加します(root directory name)

  5. ビルドプロジェクトを作成し、ビルドを実行し、ビルド情報を表示します。

    コンソールを使用してプロジェクトを作成する場合:

    1. [Operating system] で、[Ubuntu] を選択します。

    2. [ランタイム] で、[Standard (標準)] を選択します。

    3. [イメージ] で、[aws/codebuild/standard:5.0] を選択します。

    4. 次の環境変数を設定します。

      • AWS_DEFAULT_REGION の値 region-ID

      • AWS_ACCOUNT_ID の値を持つ account-ID

      • IMAGE_TAG 値が最新

      • IMAGE_REPO_NAME の値 Amazon-ECR-repo-name

    を使用してビルドプロジェクト AWS CLI を作成する場合、 create-project コマンドへの JSON形式の入力は次のようになります。(プレースホルダは独自の値に置き換えてください。)

    { "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. が Docker イメージをリポジトリに CodeBuild 正常にプッシュしたことを確認します。

    1. で Amazon ECRコンソールを開きますhttps://console.aws.amazon.com/ecr/

    2. リポジトリ名を選択します。イメージは、[Image tag (イメージタグ)] 列に表示されています。

ディレクトリ構造

このサンプルのディレクトリ構造は次のとおりとします。

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

ファイル

このサンプルで使用するファイルは以下のとおりです。

buildspec.yml ( 内)(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 ( 内)(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"]
注記

CodeBuild は、カスタム Docker イメージENTRYPOINTの を上書きします。