Docker での sbt

AdoptOpenJDK JDK 8 を用いる場合:

docker pull eed3si9n/sbt:jdk8-alpine
docker run -it --mount src="$(pwd)",target=/opt/workspace,type=bind eed3si9n/sbt:jdk8-alpine

AdoptOpenJDK JDK 11 を用いる場合:

docker pull eed3si9n/sbt:jdk11-alpine
docker run -it --mount src="$(pwd)",target=/opt/workspace,type=bind eed3si9n/sbt:jdk11-alpine

Docker 内で sbt を走らせたかったので、イメージをいくつか作った。GitHub リポジトリは eed3si9n/docker-sbt

AdoptOpenJDK

AdoptOpenJDK は、コミュニティーがメンテナンスを行っている OpenJDK のソースを元に複数のプラットフォーム向けにバイナリをビルドして配布している。adoptopenjdk/openjdk8 など Docker イメージも提供していて、Ubuntu ベースと Alpine Linux ベースのものがある。

OpenJDK を取り巻く状況は Java Is Still Free に詳しくまとまっている。

JDK 11

自分でイメージを作った動機として、再現可能な方法で JDK 11 を用いたテストを行いたかったというのがある。そのため、adoptopenjdk/openjdk8 を使ったものと adoptopenjdk/openjdk11 を使ったものの両方を作った。

使用方法

AdoptOpenJDK JDK 8 を用いる場合:

docker pull eed3si9n/sbt:jdk8-alpine
docker run -it --mount src="$(pwd)",target=/opt/workspace,type=bind eed3si9n/sbt:jdk8-alpine

AdoptOpenJDK JDK 11 を用いる場合:

docker pull eed3si9n/sbt:jdk11-alpine
docker run -it --mount src="$(pwd)",target=/opt/workspace,type=bind eed3si9n/sbt:jdk11-alpine

これは、non-root ユーザーとして Alpine Linux 内でシェルを開始する。ホストマシンのカレントディレクトリは /opt/workspace としてマウントされ、また sbt 1.2.8 がインストール済みになっている。

ホストマシンの Ivy キャッシュを再利用するには、以下のようにマウントする:

docker run -it --mount src="$(pwd)",target=/opt/workspace,type=bind \
--mount src="$HOME/.ivy2",target=/home/demiourgos1/.ivy2,type=bind eed3si9n/sbt:jdk8-alpine

その他のイメージ

Docker Hub で sbt と検索すると 1000 以上のヒットがある。