1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CodeBuildで使えるopenJDK13対応のカスタムイメージを作成してECRにPUSHする

Last updated at Posted at 2020-04-12

はじめに

現状はCodeBuildの標準イメージではopenJDK13をサポートしていない様子。
そのためopenJDK13対応のカスタムイメージを作成しCodeBuildでビルドに利用出来るようにしてみました。

作成したイメージはCodebuildで参照するためECRにPUSHします。

前提条件&注意点

  • 今回openjdk13がtestingリポジトリでしか公開されていないため利用しています。ご注意ください。
  • aws cliのバージョンが古いとget-login-passwordが使えずエラーになる可能性があります。
  • ECRリポジトリの事前に作成しておいてください。
  • 既にdockerイメージがbuild出来る環境がある想定です。
  • 利用する環境はECRへのアクセス権限を持つ必要があります。

参考:Amazon Elastic Container Registry アイデンティティベースのポリシーの例

Dockerfile作成

今回はdocker:dindベースで作成していきます。alpineベースなのでapkで必要なコマンド等を追加していきます。
少し汎用性も考慮して最終的には以下のようになりました。

tzdataはCodeBuildでビルドログを見る際に時刻を合わせるために入れています。
前述のように以下、testingのリポジトリを指定してopenjdk13をaddしています。

FROM docker:dind

RUN apk update \
    && apk --no-cache add tzdata \
    && cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && apk del tzdata \
    && apk --no-cache add curl git maven py-pip python\
    && apk --no-cache add openjdk13 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing \
    && pip install awscli \
    && apk del --purge py-pip

ベースのDockerイメージをビルド&ECRにpush

ECRにイメージをPUSHするので、先にAWSマネジメントコンソールより対象のECRリポジトリを開き「プッシュコマンドの表示」を確認しておきます。

ECRの認証トークンを取得して、PUSH準備

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/[ECRリポジトリ名]

dockerイメージをbuild

docker build -t [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/[ECRリポジトリ名]:[イメージタグ] .

ECRにイメージをPUSH

docker push [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/[ECRリポジトリ名]:[イメージタグ]

確認&CodeBuildで動かす際のサンプル

ECRにイメージがPUSHされていることを確認したら完了です。
CodeBuildで使う場合のbuildspec.ymlサンプルを下記を記載します。

alpineベースの場合timeout-tオプションを付けるとAWS公式ドキュメントに書いてありますが、
作成したイメージをrunして試したところ-tオプションがあるとエラーになるため外しました。

buildspec.yml

version: 0.2

phases:
  install:
    commands:
    - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2&
    - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
  pre_build:
    commands:
  ~以下省略~

ローカルで動かす際の注意点

作成したDockerImageをローカルで動作確認する際はprivileged: trueにしないと動作しないので注意。
自分はdocker-compose.ymlに下記のように書いてdocker-compose upで確認しています。
(Dockerimageはdocker-dind-testでbuild済み)

version: '2'

services:
  docker-dind:
    image: docker-dind-test:latest
    privileged: true
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?