概要
SpringBootをベースとしたアプリケーションをコンテナ化する。
なお、M1 Macを使用しているため、platform: linux/x86_64
の対応をしている。
APPコンテナを作成する
対応手順
- Spring Initializrで新規プロジェクトを作成する
- Jarファイルを作成する
- Dockerfileを作成する
- イメージをビルドし、コンテナの起動する
Spring Initializrで新規プロジェクトを作成する
Spring Initializrを使用すると、GUIもしくは、VSCode上の拡張機能からプロジェクトのテンプレートを作成することができる。
以下のように依存関係などの設定を行い、Generate
をクリックすることでZipファイルとしてプロジェクトのテンプレートをダウンロードすることができる。
Jarファイルを作成する
作成したプロジェクト内で以下のコマンドを入力し、Jarファイルを作成する。
この後、生成したJarファイルを使用して、コンテナ上でアプリケーションを起動する。
$ ./gradlew build
Jarファイルは、./build/libs
に生成される。
Dockerfileを作成する
以下が作成したDockerfileである。
# from the base image of a jdk 17 container.
FROM eclipse-temurin:17-jdk-alpine
# create a work dir.
WORKDIR /app
# copy a jvm app.
COPY ./build/libs/docker_spring_boot-0.0.1-SNAPSHOT.jar app.jar
# open port 8080 for a jvm app.
EXPOSE 8080
# startup a jvm app.
ENTRYPOINT ["java","-jar","app.jar"]
現時点では、生成したJarファイルをコンテナの/app
ディレクトリに配置し、これをもとにアプリケーションを起動している。
イメージをビルドし、コンテナの起動する
# イメージを作成する。
$ docker build --no-cache --tag app-hello-spring-boot .
# コンテナを起動する。
$ docker run -dp 127.0.0.1:8080:8080 --name app_container app-hello-spring-boot
例外対応
一応これらの一連の流れからDockerコンテナの生成までは可能となる。
M1 Macを使用しているがために、以下のエラーが表示された。
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
CPUのアーキテクチャが対応していないイメージを使用している場合に発生するエラー。
以下を設定することで、このエラーを回避することができる。
$ docker build --platform=linux/amd64 -t app-hello-spring-boot .
--platform
を指定しない場合には、自身のプラットフォーム向けのイメージを取得する。
しかし、M1 Macでは、ARM64に対応していないイメージを選択した場合には、エラーとなってしまう。
--platform
は、イメージの構築対象のプラットフォームを指定することができ、このエラーの回避が可能。