↓を見て便利そうなのでどんな感じなのかなと触ってみました。
Dockerfile不要のJava向けコンテナビルダー。MavenやGradleのプラグインとして動作する / “Google Cloud Platform Blog: Introducing Jib — build Java …” https://t.co/bAsxCO4lGr
— progrhyme (@progrhyme) 2018年7月9日
gradleにプラグインを追加する
plugins { id 'com.google.cloud.tools.jib' version '0.9.2' }
imageをビルドしてみる
imageのビルドはjibDockerBuildで行います。
./gradle jibDockerBuild
結果はこんな感じになりました。repositoryにはプロジェクト名が、tagにはバージョンが設定されるようです。
なんか、48年前に作成されたことになってますが↓のチケットと同件ですかね。
~ docker images REPOSITORY TAG IMAGE ID CREATED SIZE jib-demo 1.0.0 60f95e9fbe77 48 years ago 138MB
docker run --rm -p 8080:8080 jib-demo:1.0.0でさくっと起動できますね。
※48年前問題は、0.9.7のリリースで追加されたcontainer.useCurrentTimestampを使うことで、ビルド日時に変えられるようです。
build.gradleにこんな感じのものを追加するだけですね。
jib {
container {
useCurrentTimestamp = true
}
}
Dockerfileを生成してみる
Dockerfileの生成はjibExportDockerContextで行います。
./gradle jibExportDockerContext
タスクを実行すると、build/jib-docker-context配下にDockerfileが生成されます。
内容はこんな感じでした。
FROM gcr.io/distroless/java COPY libs /app/libs/ COPY resources /app/resources/ COPY classes /app/classes/ ENTRYPOINT ["java","-cp","/app/libs/*:/app/resources/:/app/classes/","siosio.jibdemo.JibDemoApplication"] CMD []
Docker Hubにpushしてみる
build.gradleにDocker Hubの認証情報とimage名を設定してあげます。
jib { to { image = "siosio/${project.name}:${project.version}" auth { username = 'siosio' password = '********************************' } } container { jvmFlags = ['-Xms512m'] ports = ['8080'] } }
pushは、jibタスクで行います。実行すると、pushしたよログが出力されます。
./gradle jib ***** 省略 ***** Container entrypoint set to [java, -Xms512m, -cp, /app/libs/*:/app/resources/:/app/classes/, siosio.jibdemo.JibDemoApplication] Built and pushed image as siosio/jib-demo:1.0.1
Docker Hubにちゃんと上がってますね。
pushしたimageを使ってさくっとアプリケーション動かせますね。
~ docker run --rm -d -p 8080:8080 siosio/jib-demo:1.0.1 35b36eb58dfce83e81525ab2364e52564f2de4697d3fbb706d7176b4a5d1b83d ~ curl http://localhost:8080 キタ─wwヘ√レvv~(゚∀゚)─wwヘ√レvv~─!!%
imageのカスタマイズ
jibに対するオプションを設定することで、imageに対する設定が色々出来るようです。
例えば、こんな感じにbase imageを指定したり、外部公開するポートを指定したり出来るようです。
jib { from { image = 'openjdk:alpine' // base imageの設定 } container { jvmFlags = ['-Xms512m'] // jvmオプション ports = ['8080'] // 外部公開するポート } }
詳しい使い方は、jib/jib-gradle-plugin at master · GoogleContainerTools/jib · GitHubを。。