JavaでWebアプリ制作を学習してみよう。- Dockerで動作するSpring Boot アプリの開発 –

2021年3月29日

前回は Spring Boot アプリで CentOS7 on VirtualBox で動作中の 「MySQL」データベースを使用してみました。

今回は CentOS7 on VirtualBox に Docker を導入し Docker 管理下で「MySQL」「Spring Boot App」「Nginx」を稼働させたWebシステムを作成し、「Spring Boot App」を Windows10上での sts4 で「リモートデバッグ」「ホッドリロード」を行えるWebアプリ開発を体験してみた。

今回は sts4でのWebアプリの開発の学習を含めながら Docker の学習へと広がってしまいました。
なぜこのようなことになったかというと

sts4で作成したWebアプリを実際にインターネット上で稼働させるにはどうすればいいかなぁ?とちょっと先のことを考えるようになってしまう。
Laravel(PHP)の時は無理くりすれば今契約しているレンタルサーバで試しの稼働を出来たのですがSpring Boot(Java)のWebアプリはそうは行かない。
レンタルサーバではなく最低でもクラウドサーバ(最低でもroot権限がある仮想サーバ)に契約が必要だろうなぁ。
今はクラウドサーバの契約は行う予定はないがLinux(CentOS or Ubuntu)サーバ上で動かす方法を学んでおこう。と思い立つ。

そこで、ちょこっとネットで調べてしまったのがことの始まりでした。
※今やっていることの見通しがついてきたら次のその先のことを考えてしまうのが私の悪い癖。(刑事ドラマの言い回しぽく)

その検索の中で私が知りたかったことを実践的なひな形として使えそうなサンプルとその解説を書かれているサイトを見つけてしまったのです。
これは学習して習得しておこうと判断し、このサイトの記事に従い自分の環境下で動かし体験して勉強をしたというわけです。

そのサイトはこちら

私は、以下のような環境下でサンプルと説明を読みながら構築し体験してみた。

サイトのサンプルと説明を順に進んでいけば自身の環境下で再現することができました。
途中若干のトラブルには見舞われましたがクリアしました。

読むだけでなく実際に動くものを手元で体験できるのはうれしい。
動くソースコードを読み、そして変更して試すことが出来るので実践的な勉強になりました。※ハンズオン

CentOS7 on VirtualBox で Dockerで動作しているWebアプリに Windows10で動かしているsts4にプロジェクトを開いておき、ブレークポイント設定してリモートデバッグをしたり、ソースコードの変更後ビルド・再起動が出来てリモートデバッグが続行出来たりと実機に近い環境での開発とデバッグが出来るのもありがたい。

私は次のことも試し、自分なりに展開してみました。

  • http://192.168.1.244:8080でアクセスしてもちゃんと画面が表示させた。
    ※どうせならこちらもちゃんと表示したいなぁと思ってしまったため。
    問い合わせ一覧を表示するページの作成した。
    ※MySQL Workbench で確認するのが面倒になってしまったため。
  • このWebアプリを MySQLからH2データベースに変更しWindows10上のsts4だけでSpring Boot Webアプリが動作するようにしてみた。
    ※手元のWindowsPCだけのスモール環境でSpring Boot Webアプリを開発し、Linux、Docker、MySQLを使用する実機環境への移行が容易かどうかの検証のため。

 

http://192.168.1.244:8080で表示(お問合せ一覧追加)

リモートデバッグ(ブレークポイント)

MySQL WorkBench

 

上記に紹介したサイトでサンプルが提供され、わかりやすい説明が書かれているので重複する説明は書きませんが、

  • ssl証明書によるhttpsアクセス(オレオレ証明書ではあるが...)
  • Dockerを使ったサーバ構築
  • sts4でのリモートデバッグ&ホットリロード

 

など、http(s)プロキシサーバ(Nginx)・Webアプリサーバ(Spring Boot / sts4)・データベースサーバ(MySQL)を一つにまとめてあって新技術の使い方を実践的に書かれていたので感動してしまった。
今までは、Linux(Ubuntu or SentOS)上に直接apache(Webサーバ)、MySQLやMariaDB(データベースサーバ)を直接立ち上げ Laravel(PHP)でWebアプリを作成していました。Dockerの利便の良さを実感しました。今後はDockerを使って行こうと思う。