準備するもの
-
JARファイル
(今回はGradleでビルド) Dockerfile
docker-compose.yaml
手順
1. JARファイルの作成
gradleのbuildタスクを実行
⇨ build/libs
フォルダにJARファイルが作成されます。
2. Dockerfile と docker-compose.yaml を作成
配置場所
project-root/
├── docker/
│ ├── Dockerfile # Dockerイメージを構築するためのファイル
│ └── docker-compose.yaml # Docker Composeでサービスを管理
Dockerfile
# JARファイルを実行するベースイメージとしてAmazon Correttoを使用
FROM amazoncorretto:17
# 作業ディレクトリを設定
WORKDIR /app
# ビルド済みJARファイルをコンテナ内の作業ディレクトリにapp.jarとしてコピー
COPY /build/libs/course-match-0.0.1-SNAPSHOT.jar app.jar
# アプリケーションを実行(コンテナ起動時に実行するコマンドを指定)
ENTRYPOINT ["java", "-jar", "app.jar"]
docker-compose.yaml
version: '3.8'
services:
app:
build:
context: .. # プロジェクトルートをビルドコンテキストに設定
dockerfile: docker/Dockerfile # Dockerfile の場所を指定
container_name: course_match
ports:
- "8080:8080" # ホスト:コンテナ
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/course_match_db
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=rootpassword
depends_on:
- db # dbコンテナの起動を優先
db:
image: mysql:8.0
container_name: course_match_db
ports:
- "3306:3306" # ホスト:コンテナ
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: course_match_db # 起動時に自動的に作成されるデータベースの名前
volumes:
- db_data:/var/lib/mysql
- ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql
volumes:
db_data:
※ application.propertiesと組み合わせて記載したい場合
docker-compose.yaml(アプリ側の環境設定のみ抽出)
app:
environment:
DB_HOST: db
DB_USER: root
DB_PASSWORD: rootpassword
application.properties
spring.datasource.url=jdbc:mysql://${DB_HOST}:3306/course_match_db
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
4. Docker Composeでコンテナをビルド・起動
cd docker # dockerディレクトリに移動
docker-compose up --build
→ JARファイル、Dockerfileをもとに、Dockerイメージを作成し、コンテナとして起動する
5. 確認
- ブラウザで
http://localhost:8080
にアクセスし、Javaアプリケーションが動作しているか確認します。(:8080はホスト側のポート番号) - MySQLコンテナはポート3306でリッスンしているので、外部のクライアントからも接続可能