0
0

More than 1 year has passed since last update.

Docker 環境の Spring Boot WEBサービスのリバースプロキシ構成

Last updated at Posted at 2023-02-10

Docker 環境の Spring Boot WEBサービスのリバースプロキシ構成

目的

Docker 環境で起動した Spring Boot WEBサービスにリバースプロキシを設定して理解を深めます。

実現すること

ローカル (Ubuntu) の Docker 環境 (Docker Desktop) に Nginx と Spring Boot WEBアプリの Docker イメージをデプロイ・起動します。

開発環境

  • Windows 11 Home 22H2 を使用しています。
  • WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。

WSL (Microsoft Store アプリ版)

> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47

Ubuntu

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04

Java JDK ※ 最小構成 Java JDK の導入と Hello World!

$ java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

Maven ※ 最小構成 Maven の導入と Hello World!

$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

Docker Desktop

Version 4.16.3 (96739)
$ docker --version
Docker version 20.10.22, build 3a2c30b
$ docker-compose --version
Docker Compose version v2.15.1

※ この記事では基本的に Ubuntu のターミナルで操作を行います。

"Hello World" を表示する手順

Spring Boot WEBサービスの作成

最小構成 Spring Boot WEBサービスの Hello World! を参照してください。

プロジェクトフォルダに移動

$ cd ~/tmp/hello-spring-boot

※ ~/tmp/hello-spring-boot をプロジェクトフォルダとします。

Docker イメージを作成

Spring Boot WEBサービスを Docker 環境で起動する を参照してください。

docker-compose.yml の修正

リバースプロキシとして Nginx を設定します。

$ vim docker-compose.yml

ファイルの内容

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    links:
      - app
  app:
    image: app-hello-spring-boot
    ports:
      - "8080:8080"

nginx.conf を作成

$ vim nginx.conf

ファイルの内容

events {
}

http {
  server {
    listen 80;
    location / {
      proxy_pass http://app:8080/;
    }
  }
}

ディレクトリ・ファイル構成

$ tree -I test -I target
.
├── Dockerfile
├── HELP.md
├── docker-compose.yml
├── mvnw
├── mvnw.cmd
├── nginx.conf
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── springboot
        │               ├── SpringbootApplication.java
        │               └── controller
        │                   └── DataController.java
        └── resources
            ├── application.properties
            ├── static
            └── templates

Docker 環境で起動

コンテナ起動

$ docker-compose up -d
[+] Running 2/2
 ⠿ Container hello-spring-boot-app-1  Started
 ⠿ Container hello-spring-boot-web-1  Started

確認

$ docker ps | grep hello-spring-boot
b86a40e332f9   nginx:latest           "/docker-entrypoint.…"  0.0.0.0:80->80/tcp      hello-spring-boot-web-1
1ea55b1acfcb   app-hello-spring-boot  "java -jar app.jar"      0.0.0.0:8080->8080/tcp  hello-spring-boot-app-1

※ Docker Desktop を確認するとコンテナとして起動しています。

WEBブラウザで確認

http://localhost/api/data

WEBブラウザに {"message":"Hello World!"} と表示され、JSON データを取得することが出来ました。

※ もしくは別ターミナルのコマンドで確認

$ curl -X GET http://localhost/api/data
{"message":"Hello World!"}

リバースプロキシ動作の確認

Nginx コンテナのログを確認

$ docker-compose logs web
hello-spring-boot-web-1  | 172.18.0.1 - - [10/Feb/2023:03:37:29 +0000] "GET /api/data HTTP/1.1" 200 37 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"

Nginx 経由で Spring Boot WEBアプリにアクセスしています。

まとめ

  • Ubuntu の 最小構成の Java 開発環境で Spring Boot WEBサービスとリバースプロキシを Docker 環境にてコンテナとして起動させることが出来ました。
0
0
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
0
0