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/
ヽ(=´▽`=)ノ
あ、でも、違うんやで。今日はこれがやりたかったというわけじゃないんやで。まいっか、やりたかったことは、また次の機会に。