TomcatだけでなくWebサーバーも使いたい! ↓ ↓
ファイルy構成
doker/
├ build
│ └ libs
│ └ App-0.0.1-SNAPSHOT.jar
├ image
│ └ postgres
│ └ Dockerfile
|
├ java
│ └ Dockerfile
|
├ postgres
│ └ init
│ └inti.sql
|
└ docker-compose.yml
App-0.0.1-SNAPSHOT.jar
SpringBootで作成した実行するjarファイル。
Tomcatが内蔵されている。
Dockerfile (image/postgres)
FROM postgres:13.2-alpine
ENV LANG ja_JP.utf8
postgreSqlをインストールする。
Dockerfile (java/)
FROM openjdk:21
RUN microdnf install findutils
javaをインストールする。
init.sql
-- DB作成
CREATE DATABASE example;
-- 作成したDBに接続
\c example;
-- テーブル作成
DROP TABLE IF EXISTS usertable;
CREATE TABLE UserTable (
id BIGINT NOT NULL,
areaid BIGINT NOT NULL,
name VARCHAR(100) NOT NULL,
area VARCHAR(100) NOT NULL,
address VARCHAR(255) NULL,
phone VARCHAR(50) NULL,
update_time DATE NOT NULL,
PRIMARY KEY (id));
INSERT
INTO usertable(id, areaid, name, area, address, phone, update_time)
VALUES (1, 9,'a b c', '九州', '佐賀', '0909999999', CURRENT_TIMESTAMP);
INSERT
INTO usertable(id, areaid, name, area, address, phone, update_time)
VALUES (2, 1,'e f g', '関東', '東京', '0909999999', CURRENT_TIMESTAMP);
INSERT
INTO usertable(id, areaid, name, area, address, phone, update_time)
exampleデータベースを作成する。
UserTableテーブルを作成してデータも投入する。
docker-compose.yml
#version: '3'
services:
# Javaの設定情報
java:
# コンテナ名
container_name: springjar
build: ./java
ports:
- "8080:8080"
# local参照先:コンテナ展開先
volumes:
- ./build/libs:/app
# コンテナ内のディレクトリ定義
working_dir: /app
tty: true
db:
container_name: spring_list_post
build: ./image/postgres
restart: always
ports:
- "5432:5432"
volumes:
- ./postgres/init:/docker-entrypoint-initdb.d
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
--- AWSでDockerを起動する場合の注意点 ---
java/ports:8080:8080 の左の8080は、AWSのHTTPのインバウンドと合わせる必要がある。
右の8080は、App-0.0.1-SNAPSHOT.jar に内蔵されたTomcatのポート。
なので以下のようにする必要がある。
多分HTTPSを使うときは443にする必要があると思われる。
ちなみにAWSのインバウンドルール(アウトバウンドルールも)設定を変えた場合に
EC2のインスタンスは再起動が不要ですぐに反映される。
※ソース[0.0.0.0/0」はHTTPリクエストで呼び出している、
IPアドレスは何でもOKという意味。
services:
# Javaの設定情報
java:
# コンテナ名
container_name: springjar
build: ./java
ports:
#左はAWSのインバウンドルールのHTTPのポート
- "80:8080"
本題とは直接関係ないが、DockerfileにSpringBootの起動がないので手動で起動する方法は以下
以下を実行して、サービス「java」へ入る。
sudo docker compose exec java bash
以下で起動する。
[ec2-user@ip-172-31-43-145 Docker20250428]$ sudo docker compose exec java bash
bash-4.4# ls
ListPostGo-0.0.1-SNAPSHOT.jar
bash-4.4# java -jar ListPostGo-0.0.1-SNAPSHOT.jar
Docker側でSpringBootのjarを自動起動するには以下のようにDockerfileを書くらしい。
# ベースイメージの指定
FROM openjdk:17
# ワーキングディレクトリの設定
WORKDIR /app
# アプリケーションのJARファイルをコンテナにコピー
COPY build/libs/*.jar app.jar
# ポートの公開
EXPOSE 8080
# アプリケーションの実行コマンド
ENTRYPOINT ["java", "-jar", "app.jar"]