茶の間で読めるITチップス

情報セキュリティ、ITの便利用途など直ぐに役立つ知見を発信してきます!

DockerにGradleとSpringBootの開発環境構築(その2)

前回はAlpineLinuxでGradleのパスが上手く通らなかったので、慣れ親しんでいるubuntuで構築することにした。

この記事の目標

① Docker内でGradleでビルド&実行(とりあえずspringbootは無し)

② ①で成功したコマンドをDockerfileに追記してdocker run

 

① Docker内でSpring BootをGradleでビルド&実行

Dockerfile

FROM ubuntu:18.04

イメージの作成。

ubuntu:~/environment/sample_java $ docker build -t springboot:2 .
ubuntu:~/environment/sample_java $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot 1 9d36d8bf12cd 27 hours ago 108MB
ubuntu 18.04 549b9b86cb8d 4 days ago 64.2MB
springboot 2 549b9b86cb8d 4 days ago 64.2MB
alpine 3.10 965ea09ff2eb 2 months ago 5.55MB

Docker起動~Gradleインストールまで。

ubuntu:~/environment/sample_java $ docker run -it springboot:2
root@3a9f5196ce35:/# apt-get update
root@3a9f5196ce35:/# apt -y install openjdk-8-jdk
root@3a9f5196ce35:/# apt-get install zip unzip
root@3a9f5196ce35:/# apt -y install curl
root@3a9f5196ce35:/# source "$HOME/.sdkman/bin/sdkman-init.sh"
root@3a9f5196ce35:/# sdk install gradle

Gradleでプロジェクト作成。

root@3a9f5196ce35:/# cd root
root@3a9f5196ce35:~# mkdir myApp
root@3a9f5196ce35:~# cd myApp
root@3a9f5196ce35:~/myApp# gradle init --type java-application
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 4
Project name (default: myApp):
Source package (default: myApp):
root@42802f77ac46:~/myApp# ls
build.gradle gradle gradlew gradlew.bat settings.gradle src

とりあえずsdkインストールまでをDockerfileにして起動してみる。

上記のコマンドをRUNを付けて、そのまま作成したのですが、以下のように怒られて、どうしてもsdkだけインストールできなかった。

/bin/sh: 1: sdk: not found
The command '/bin/sh -c sdk install gradle' returned a non-zero code: 127

→以下のサイトで解決

sdkmanはJavaをdockerfileにインストールしません - dockerfile - Program QA

 Dockerfile

FROM ubuntu:18.04
ENV SDKMAN_DIR=/root/.sdkman
RUN apt-get update
RUN apt -y install openjdk-8-jdk
RUN apt-get install zip unzip
RUN apt -y install curl
RUN curl -s "https://get.sdkman.io" | bash
RUN echo "sdkman_auto_answer=true" > $SDKMAN_DIR/etc/config
RUN echo "sdkman_auto_selfupdate=false" >> $SDKMAN_DIR/etc/config
RUN bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh && sdk install gradle"
WORKDIR ~
RUN mkdir ~/myApp
VOLUME ~/myApp

無事起動できたのでOKとする。

ubuntu:~/environment/sample_java $ docker run -v ~/environment/sample_java/myApp:/root/myApp -it springboot:1
root@42802f77ac46:/~#