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:/~#