1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Springboot+Dockerで環境構築してみた

Posted at

はじめに

Javaのフレームワーク SpringBootを仮想環境のコンテナDockerとともにシンプルな環境構築をしていきます。
今回は下記の資料を参考に作成していますが、最新の情報に修正し環境構築しております。
下記の資料も併せてご確認いただければ幸いです。

注意
ここではDockerのセットアップについて省略しておりますので、
まだインストールしていない方は下記の資料をご覧ください。
https://x-tech.pasona.co.jp/media/detail.html?p=2675

ターミナル内にディレクトリを作成し、プロジェクト構成を行う

1:dockerfileを作成する

ターミナル内に新規のディレクトリを作成後、
参考資料を基にプロジェクト構成を進めます。
今回はディレクトリ内にdemoディレクトリを新規作成し、その中にDockerfileを作ります。

.
  ├── demo
  │   ├── src
  │   │   ├── main
  │   │   │   ├── java/com/example/demo
  │   │   │   │   ├── controller/HelloController.java
  │   │   │   │   ├── form/HelloForm.java
  │   │   │   │   ├── DemoApplication.java
  │   │   │   └── resources/templates/hello.html
  │   ├── pom.xml
  │   └── Dockerfile # ←ここ
  └── docker-compose.yml

ディレクトリの中に入った後、Spring Boot のアプリをコンテナ化するための
Dockerfile を作成します。

mkdir springboot_environment_building
cd springboot_environment_building
mkdir demo
cd demo
touch Dockerfile
# ベースイメージとして eclipse-temurin:17-jdk を使用
  FROM eclipse-temurin:17-jdk-alpine
  
  # Maven をインストール
  RUN apk add --no-cache maven
  
  # 作業ディレクトリを設定
  WORKDIR /app
  
  # 依存関係を事前にダウンロード(ビルド時間短縮のため)
  COPY demo/pom.xml .
  RUN mvn dependency:go-offline -B
  
  # プロジェクトのソースコードをコピー
  COPY demo/ .
  
  # JAR ファイルを作成(テストはスキップ)
  RUN mvn clean package -DskipTests
  
  # ホットリロードを有効にする環境変数を設定
  ENV JAVA_OPTS="-Dspring.devtools.restart.enabled=true -Dspring.devtools.livereload.enabled=true"
  
  # アプリケーションの起動(ホットリロード用にmvn spring-boot:runをデフォルトコマンドに)
  CMD ["mvn", "spring-boot:run"]

openjdk:17-jdk-alpineは2023〜2024 年頃から、OpenJDK の Alpine ベースイメージは セキュリティや互換性の問題で非推奨となり、その多くが削除されました。
openjdk:17-jdk-alpineでdockerを立ち上げても、

docker-compose up --build

Docker Hub から pull できず、下記のようなエラーになります。

failed to resolve source metadata for docker.io/library/openjdk:17-jdk-alpine

以下のどれかに変更すればdockerが動きます。
Temurin(Adoptium)は現在の主流で、OpenJDK の代替として公式に推奨されています。

安定版(最も推奨)

FROM eclipse-temurin:17-jdk

Alpine が必要なら(軽量)

FROM eclipse-temurin:17-jdk-alpine

2:docker-compose.yml の作成

demoディレクトリから最初に作ったディレクトリに戻り、
docker-compose.yml を作成して、Docker コンテナの管理を簡易にします。

cd..
touch docker-compose.yml
docker-compose.yml
version: '3.8'
services:
    demo:
      image: sb-app  # 使用するDockerイメージの名前
      build:
        context: .  # Dockerfile のあるディレクトリを指定
        dockerfile: demo/Dockerfile  # ビルドに使うDockerfileのパス
      ports:
        - "8081:8080"  # ホストの8081ポートをコンテナの8080ポートにマッピング
      volumes:
        - ./demo:/app:cached  # ローカルのソースコードをコンテナにマウント(ホットリロード対応)
        - ~/.m2:/root/.m2  # Maven のキャッシュを共有(ビルド時間短縮。Mavenのキャッシュは以前のビルドで取得したライブラリを再利用するための仕組みです)
      environment:
        - JAVA_OPTS=-Dspring.devtools.restart.enabled=true -Dspring.devtools.livereload.enabled=true  # ホットリロードを有効化
      command: mvn spring-boot:run  # Spring Boot の開発用サーバーを起動

3:pom.xml の作成

demoディレクトリに移動し、pom.xml にSpring Bootプロジェクトの基本的な設定を追加します。(Spring Boot Starter WebとTestの依存関係を含む)

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4:コンテナの起動

コンテナを立ち上げます。

# Docker Compose でコンテナを起動
  $ docker-compose up --build

ブラウザで http://localhost:8081 にアクセスすると、Spring Boot のアプリが表示されます。
今回はルートパス(/)や他のエンドポイントを処理するコントローラーがありません。
そのため、ブラウザで http://localhost:8081 にアクセスすると、

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Jan 27 02:10:39 GMT 2026
There was an unexpected error (type=Not Found, status=404).

404 Not Foundエラーが発生し、このデフォルトページが表示されます。
つまり、Spring Bootのデフォルトのエラーページ(Whitelabel Error Page)で、アプリケーションが正常に起動していることを示しています。

シンプルな環境構築方法としては、以上となります。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?