メニュー
AWS CodeBuild
ユーザーガイド (API Version 2016-10-06)

AWS CodeBuild の Docker サンプル

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

このサンプルは、Docker Hub の maven:3.3.9-jdk-8 Docker イメージを参照してテストされました。

重要

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

サンプルの実行

このサンプルを実行するには。

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

    Copy
    { "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 環境変数で表され、この手順の後の方で指定するリポジトリ名と一致する必要があります。

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

    Copy
    { "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. このトピックの「ディレクトリ構造とファイル」セクションで説明されているようにファイルを作成し、Amazon S3 入力バケットまたは AWS CodeCommit または GitHub リポジトリにアップロードします。 repository.

    重要

    (ルートディレクトリ名) をアップロードしないでください。(ルートディレクトリ名) の中のファイルだけです。

    Amazon S3 入力バケットを使用している場合は、ファイルを含む ZIP ファイルを作成してから、入力バケットにアップロードしてください。ZIP ファイルには (ルートディレクトリ名) を追加しないでください。(ルートディレクトリ名) の中のファイルだけです。

  5. AWS CodeBuild を直接実行する」の手順に従って、ビルドプロジェクトを作成し、ビルドを実行し、関連するビルド情報を表示します。

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

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

    1. https://console.aws.amazon.com/ecs/ にある Amazon ECS コンソールを開きます。

    2. Repositories を選択します。

    3. リポジトリ名を選択します。イメージは Images タブに表示されます。

ディレクトリ構造

このサンプルでは、このディレクトリ構造を前提としています。

Copy
(root directory name) |-- buildspec.yml `-- Dockerfile

ファイル

このサンプルでは、これらのファイルを使用しています。

buildspec.yml ((ルートディレクトリ名) の中)

Copy
version: 0.1 phases: pre_build: commands: - echo Logging in to Amazon ECR... - $(aws ecr get-login --region $AWS_DEFAULT_REGION) build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $IMAGE_REPO_NAME . - 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 ((ルートディレクトリ名) の中)

Copy
FROM maven:3.3.9-jdk-8 RUN echo "Hello World"

イメージを Docker Hub にプッシュするためのサンプルの適応

Docker イメージを Amazon ECR の代わりに Docker Hub にプッシュするには、このサンプルのコードを変更します。

  1. buildspec.yml ファイルにある、以下の Amazon ECR 固有のコードの行が置き換えの対象です。

    Copy
    ... pre_build: commands: - echo Logging in to Amazon ECR... - $(aws ecr get-login --region $AWS_DEFAULT_REGION) 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 ...

    代わりに、以下の Docker Hub 固有のコードの行に置き換えます。

    Copy
    ... pre_build: commands: - echo Logging in to Docker Hub... - docker login --username="$DOCKER_HUB_USERNAME" --password="$DOCKER_HUB_PASSWORD" 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. 変更されたコードを Amazon S3 入力バケットまたは AWS CodeCommit または GitHub にアップロードします。 repository.

    重要

    (ルートディレクトリ名) をアップロードしないでください。(ルートディレクトリ名) の中のファイルだけです。

    Amazon S3 入力バケットを使用している場合は、ファイルを含む ZIP ファイルを作成してから、入力バケットにアップロードしてください。ZIP ファイルには (ルートディレクトリ名) を追加しないでください。(ルートディレクトリ名) の中のファイルだけです。

  3. JSON 形式の入力から create-project コマンドまでの以下の行のコードが置き換えの対象です。

    Copy
    ... "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" } ] ...

    代わりに、以下のコードの行に置き換えます。Docker Hub の認証情報とリポジトリ名を指定し、ソースコードから分けています。

    Copy
    ... "environmentVariables": [ { "name": "DOCKER_HUB_USERNAME", "value": "your-Docker-Hub-user-name" }, { "name": "DOCKER_HUB_PASSWORD", "value": "your-Docker-Hub-password" }, { "name": "IMAGE_REPO_NAME", "value": "your-Docker-Hub-repo-name" }, { "name": "IMAGE_TAG", "value": "latest" } ] ...
  4. AWS CodeBuild を直接実行する」の手順に従って、ビルド環境を作成して、ビルドを実行し、関連するビルド情報を表示します。

  5. AWS CodeBuild が Docker イメージをリポジトリに正常にプッシュしたことを確認します。Docker Hub にサインインし、リポジトリに進み、[Tags] タブを選択します。latest タグには、ごく最近の [Last Updated] の値が含まれています。