AWS（EC2）にDockerで起動するSpringBootを構築する際のポート

https://qiita.com/sabapro/items/4ce9d18299f0b0a0c741

TomcatだけでなくWebサーバーも使いたい！ ↓ ↓

https://qiita.com/shinya_sun_sun/items/d9f4b7eb4d29ee99b61d

https://qiita.com/ke_suke0215/items/1b0128c140dd051b5993


## ファイルy構成
doker/
　├ build
　│　└ libs
　│　　  └  App-0.0.1-SNAPSHOT.jar :point_up:
　├ image
　│　└ postgres
　│　　　　└ Dockerfile :point_up:
　｜
　├ java
　│　└ Dockerfile :point_up:
　｜
　├ postgres
　│　└ init
　│　　　　└inti.sql :point_up:
　｜
　└ docker-compose.yml :point_up:

 ### 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のポート。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074484/f8bddd1a-365d-4197-95f6-9fcfd0df7ffd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074484/69e0d9ef-94ec-4b52-a4df-598dcac806db.png)

なので以下のようにする必要がある。
多分HTTPSを使うときは443にする必要があると思われる。

ちなみにAWSのインバウンドルール（アウトバウンドルールも）設定を変えた場合に
EC２のインスタンスは再起動が不要ですぐに反映される。

※ソース[0.0.0.0/0」はHTTPリクエストで呼び出している、
　IPアドレスは何でもＯＫという意味。
```
services:
 # Javaの設定情報
  java:
    # コンテナ名
    container_name: springjar
    build: ./java
    ports:
    #左はＡＷＳのインバウンドルールの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"]
```

https://qiita.com/ke_suke0215/items/1b0128c140dd051b5993