Spring Boot + Docker 環境構築
この記事ではSpring Boot と Docker を使って
バックエンド環境を構築する手順を紹介します。
私自身あまり記事を書いた経験もなく、初めての環境構築ということもあり
拙い内容だとは思いますが、自分用の忘備録として記事にしてみました。
今回の内容
- Spring環境のコンテナ化
- デモAPIへのアクセス
- セキュリティソフトによるエラーへの対応
🗂 作業手順のまとめ
✅ 1. Spring Boot プロジェクトの作成
まずは、Spring Boot プロジェクトを作成します。Spring Initializr
または IDE(IntelliJ IDEA, Eclipse など)を使用してプロジェクトを作成します。
使用バージョン:
- Java 17
- Spring Boot 3.x
必要な依存関係:
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Lombok
必要に応じて、他の依存関係を追加します。
✅ 2. PostgreSQL 用の設定ファイル作成(application.properties
)
次に、Spring Boot で使用する PostgreSQL の設定を application.properties
ファイルに記述します。
spring.application.name=backend
# DB接続設定
spring.datasource.url=jdbc:postgresql://db:5432/db
spring.datasource.username=myuser
spring.datasource.password=mypassword
# JPA設定
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
db
は Docker Compose に定義するサービス名と一致させます。
✅ 3. Dockerfile の作成(backend/Dockerfile
)
Spring Boot アプリケーションを Docker コンテナ内で実行するための Dockerfile
を作成します。
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY build/libs/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
✅ 4. docker-compose.yml の作成
次に、docker-compose.yml
ファイルを作成します。このファイルで、PostgreSQL と Spring Boot のコンテナを連携させます。
version: '3.8'
services:
db:
image: postgres:15
container_name: postgres_container
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: db
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: spring_backend
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydatabase
SPRING_DATASOURCE_USERNAME: myuser
SPRING_DATASOURCE_PASSWORD: mypassword
volumes:
pgdata:
✅ 5. ビルド時の注意点(JAR生成)
Spring Boot アプリケーションは、コンテナ化の前に .jar
ファイルを生成する必要があります。以下のコマンドを実行して JAR ファイルを作成します(テストをスキップ)。
./gradlew clean build -x test
✅ 6. Docker 起動コマンド
最後にDocker Compose を使ってコンテナを起動します。バックグラウンドで実行するには -d
オプションを追加します。
docker-compose up --build -d
これで、Spring Boot アプリケーションは localhost:8080
でアクセス可能になります。
🎯 DemoAPI に対して Fetch を実行
ApiDog
を使って、controller
で作成したエンドポイントに対してアクセスしメッセージを受け取ります。
package com.example.backend.controller;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class GreetingController {
@GetMapping("/hello")
public String hello() {
return "Hello World from Spring Boot!";
}
}
ApiDogで作成したAPIへアクセス
以下のようにメッセージを受け取ることができたら成功です!
🧯 環境構築中のトラブルと対処法
問題 | 対処方法 |
---|---|
JARが見つからず Docker ビルドに失敗 |
./gradlew clean build を実行し、build/libs 配下に JAR が生成されているか確認 |
Gradle テストでエラー | DB接続が原因の場合が多いため、DBの起動と設定値を確認。-x test で一時スキップ可能 |
アンチウイルス(McAfee)によるアクセス拒否 | リアルタイムスキャンを一時的に停止すると解消する場合あり |
🧨 アンチウイルスソフトによるエラー
Gradle ビルド中に以下のエラーが発生しました:
Multiple build operations failed.
Could not move temporary workspace (...\.gradle\caches\...) to immutable location (...\.gradle\caches\...)
🔍 主なメッセージ内容
Could not move temporary workspace
immutable location
-
.gradle\caches\...\transforms\...
の操作に失敗
これにより、ビルドが複数回失敗し、正常にプロジェクトを起動できなくなりました。
🎯 原因
Windows の .gradle
フォルダに対して、McAfee(マカフィー)のリアルタイムスキャン機能がアクセスをブロックしていました。この影響で、.gradle\caches\transforms\...
以下のファイルやディレクトリの「読み取り専用」属性が解除できず、Gradle が一時ファイルを移動・書き換えできませんでした。
🛠 対処方法
✅ 1. McAfee のリアルタイムスキャンを一時停止
- タスクトレイのマカフィーアイコンを右クリック
- 「リアルタイムスキャンの無効化」または「ウイルスとスパイウェア対策」→「リアルタイムスキャンの管理」
- 15分~30分程度、無効化を設定
📌 無効化は一時的に行い、作業後は再度有効化することを推奨。
※この対処方法は自己責任で行ってください。
✅ 2. アンチウイルスソフトの除外設定を利用する
アンチウイルスソフトにはスキャン除外フォルダを設定できるものもあるため
利用中のアンチウイルスソフトの設定を確認する。
📌 一部のアンチウイルスソフトはファイルのみしか指定できない。
対処法をご存じの方がいましたら教えてください...。
最後に
お疲れさまでした!拙い内容だったとは思いますが、ここまで閲覧していただきありがとうございます。Spring+Dockerの環境構築が終了しました!
これでとりあえずはAPIへのアクセスまでおこなえる状態にはなったのですが
使ってみていくつか気づいたことがあります。
- Javaファイルを変更するたびに
./gradlew build
をしないといけない - ログがものすごく見にくい etc...
といった感じでバックエンド環境として動くものの
この環境でシステム開発をしたいかと言われると・・・って感じです。
なので次回の記事ではこの辺りの問題を解決し、より開発しやすいバックエンド環境を
目指して修正をおこなっていこうと思います!
使用したツールなど