今回は、Docker上に簡単なJavaアプリケーションをビルド、実行する方法についてみていきたいと思います。
以下の環境・IDEで行います。
- Mac Book M1
- Intellij
Spring Webプロジェクト生成
プロジェクト生成にはSpring Initalizrを使用して生成します。

簡単なRestful APIを作ってみたいと思いますので、「ADD DEPENDENCIES」を推して依存性に「Spring Web」を追加します。
それから下にある「GENERATE」ボタンを押してダウンロードします。
Controller作成
ここではサンプルControllerを作成します。
「/src/main/java/com/example/demo」の配下に「controller」パッケージを作成します。そこから以下のControllerクラスを作成します。
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SampleController {
@GetMapping(value = "/sample", produces = "application/json")
public String get() {
return "Hello World";
}
}
本当に簡単なRest Controllerとなります。Getの「/sample」が呼ばれたら「Hello World」を返却するクラスとなります。
Dockerfile作成
次はDockerfileを作成します。このファイル名は「Dockerfile」である必要がありますので、ご注意してください。
ファイル作成はプロジェクトの最上位(build.gradleと同じに配置)に作成します。
FROM openjdk:15-jdk-alpine EXPOSE 8080 ADD ./build/libs/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
- Java15を使用し、OpenJDKの公式Dockerイメージを使います。
- 8080ポートを公開します。
- 「build/libs」にあるJARファイルをDockerイメージに追加します。
- Dockerイメージでコンテナを実行するときにDockerで使用するコマン(java -jar /app.jar)ドを指定します。
Mac M1ではDockerイメージをビルドすることきにプラットフォームを指定していないと以下のエラーが発生する可能性があります。
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:853105ad984a9fe87dd109be6756e1fbdba8b003b303d88ac0dda6b455f36556: not found
エラーが発生したらDockerfileを以下のよう(プラットフォームを指定)に修正すれば正常にビルドできます。
FROM --platform=linux/x86_64 openjdk:15-jdk-alpine
EXPOSE 8080
ADD ./build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
アプリケーションのビルド
プロジェクトをビルドしてJarファイルを作ります。
ビルドには以下のコメンどを利用します。
$ ./gradlew build

ビルドが完了したら「build/libs」にJarファイルが生成されます。

Dockerイメージのビルド
ここではDockerイメージをビルドしてみます。コマンドは以下となります。
$ docker build -t docker-build-exam
「docker-build-exam」はタグ名で好みで書いても構いません。

ここでエラーが発生する方は「Dcokerfile作成」の最後を見てください。
Docker上でアプリケーション起動
以下のコマンドを利用してアプリケーションを起動します。
$ docker run --rm -p8080:8080 docker-build-exam
- –rm:コンテナが停止されるとDockerがコンテナを削除してくれるオプションです。
- -p8080:8080:コンテナの8080ポートをDocker hostの8080ポートにマッピングし、外部から呼び出すことができるようにするオプションです。
- docker-build-exam:イメージビルド時に指定したタグ名です。

アプリケーションが8080ポートで起動できることが確認できますね。
確認
ブラウザを開いて「localhost:8080/sample」を叩いてみましょう。

「Hello World」が正常に表示されることが確認できます。
