Mavenではやったことあるけど、Gradleでやったことないなーって思って、ここを見ながらやったらすぐできるかな?と思ったけど、いつも通りなんか色々気になって結局うろうろ見て回ってしまった。
今回使ったソース
違うとこ
- Dockerfileに
JAVA_OPTSを足しといた - gradle-dockerの最新バージョン(0.19.2)を使っといた
結構色々見て回った気がしたけど、こう書いてみるとたいしたことしてないな。
DockerfileにJAVA_OPTSを足しといた
Gradle全然関係ないか。。。
Dockerfileどこに置くん?ってなったけどサンプルコード(https://github.com/spring-guides/gs-spring-boot-docker/tree/master/complete)見たらリポジトリーのルートだった。まぁ、そこがプラグインのデフォルトってだけなので、設定で場所を指定できるすね。
で、そのDockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar
これで、起動時にJAVA_OPTS環境変数でごにょごにょ指定できる。でも、どうしてSpringの公式にはDockerfileでオプションを渡せるようにする方法が書いてないんだろう?別のいいやり方があるのかな?と思いながら、うろうろしてみたけど特に見つけられなかったや。
gradle-dockerの最新バージョン(0.19.2)を使っといた
dependsOn buildの部分で怒られるのなんだろうなー?と思いながら。プラグインのリポジトリーを見に行って、README読みながら、こんな感じかなって思うのを書いた。結局その怒られる部分は削っといた。
GitHub - palantir/gradle-docker: a Gradle plugin for orchestrating docker builds and pushes.
SpringInitializrで生成されたやつに対して書き加えたのはこの辺:
buildscript {
…
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
…
}
dependencies {
…
classpath('gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.19.2')
}
}
…
apply plugin: 'com.palantir.docker'
…
ext {
dockerImagePrefix = 'bufferings'
}
docker {
name "${dockerImagePrefix}/${project.name}"
files bootJar.archivePath
buildArgs(['JAR_FILE': "${bootJar.archiveName}"])
}
なんとなくDockerHubのpush先のprefixにgroup使うよりは別の名前のがいいなって思ってdockerImagePrefixという名前の変数を作ってみた。extってこういう使い方でいいんかな?
ビルド
Dockerイメージのビルドは、こんな感じで
$ ./gradlew build docker
イメージが作られる。今回サンプルで作ったプロジェクトの名前はhello-bootだからそれがイメージのリポジトリー名に使われてる。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE bufferings/hello-boot latest 6a1a102d8c30 42 minutes ago 119MB
プッシュ
DockerHubへのプッシュは、こんな感じで
$ ./gradlew dockerPush
pushされてた。docker loginしとかないとエラーになるすね。
https://hub.docker.com/r/bufferings/hello-boot/
ヽ(=´▽`=)ノ
あ、でも、違うんやで。今日はこれがやりたかったというわけじゃないんやで。まいっか、やりたかったことは、また次の機会に。