Spring Boot on Docker for Windowsを目指したメモ
GW中にSpring Bootで作ったアプリをDocker上で動かそうと思い立ったので、 やったことのメモ。 Spring BootもDockerも初めて触ったので情報が正しいかはわからないが、備忘録がてら残しておく。 やったことの詳細はそのうちまとめたい。まとめていけたらいいなぁ。
やりたかったこと
Spring BootでWebアプリケーションを作ってみたい。
それをDocker上で動かしたい。(AWSやGCPでもDocker利用できるみようだし、APサーバ立てるより楽にならないかなー)
でも手元にはWindowsマシンしかない。Linuxとデュアルブートしてもいいけど、めんどくさいからそのまま使いたい。
⇒Spring Boot on Docker for Windowsでやってみよう。
最終的に使用した環境・ソフトウェア一覧など
作業マシンのOS
Windows10 Pro(64bit)動作環境用のブラウザ
Google chrome 57.0.2987.133 (64-bit)Spring Bootアプリの開発環境
Dockerに乗せる前の動作確認用DB
MySQL Community Server 5.7仮想コンテナ
Docker for windows
Version 17.03.1-ce-win5 (10743) (作業時点のstable version)参考書籍
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発(株式会社NTTデータ) | 翔泳社の本
作ったもの
ソース類はここに置いた。
やったこと
Eclipse環境の準備
PleiadesをDLして解凍しただけ。
たしか、Windows 64bit StandardEditionのJava。
JDKはもとからインストール済みだったので省略。Spring Bootでアプリを作る
- ResponseBodyを直接指定して、単に文字列を返すアプリ
公式のサンプル通りに。 - Spring MVC & Thymeleafで簡単な画面を作る
画面遷移込みで。名前を入れて、「Hello, 名前!」を表示するだけ。- spring-boot-starter-thymeleafに依存関係張る
- 単一のレイアウトで画面作成
- 画面遷移してみる
- レイアウトの共通化
- 入力部品の共通化
Thymeleaf3 の fragment expressions で View の共通化を促進する - エンタープライズギークス (Enterprise Geeks)
(´・ω・)。oO(たびたびお世話になるなぁ。。。)
MyBatis3でDBアクセス
Helloした名前とその回数・最終アクセス日時を保存する。
MyBatisがspring-boot用のstarterを出しているのでそれを利用。実行可能jarにして試してみる。
公式のリファレンスみつつ。
- ResponseBodyを直接指定して、単に文字列を返すアプリ
作ったアプリをDockerで動かす。
- DockerをWindowsに入れる。
- Docker上にMySQLを構築する
とりあえずホストマシン(Windows10Pro)上のDBサーバにつなぐつもりだったが、
ゲスト to ホストの通信はめんどくさそう。どうせならDocker上にMySQL建てよう。- Docker Hubにmysqlのリポジトリがあったのでそのまま使う。
- ホストマシンからmysqlクライアントで接続して、動作確認用のDDLを流して使えることを確認。
そのために、ポート3306をホストに公開してコンテナを再作成した。
- Spring BootアプリをDocker上で動かす
- Spring.ioのガイドに従って。
アプリ構築部分はすでに作っているので省略。- Dockerfileを使ってイメージを作成。
ただしイメージのビルドはdocker buildで実施。なんとなく。
MavenやGradleでビルドする(というかビルドファイルを残しておく)べきだった気もする。
Dockerfileが残ってればいいか。 - 作成したイメージからdocker run。
ポート8080をホストに公開する。(動作確認をホストマシンから実施するので)
- Dockerfileを使ってイメージを作成。
- MySQLにつながらないのでどうにかする。
DBサーバのアドレスがlocalhostのままだった。
MySQLのコンテナのIPを調べる。
docker exec [container_id] hostname -i
本当はIP固定にしないと。ネットワークを自分で構成しないといけない様子。
http://qiita.com/paihu/items/17aa47906dd2bf935a25
これはまた今度。 動作確認。 ホストマシンから
http://localhost:8080
にアクセス。動くことを確認。
一旦とめたら、次はコンテナをdocker startしてやればいい様子。docker container list -a dokcer start [container_id]
- Spring.ioのガイドに従って。
次の目標
- Spring Boot
- TERASOLUNA Server Framework for Java 5をSpring Boot上に移植したい
TERAのpomがSpring-boot-starterに依存しているっぽいので、少し工夫すればいける?いけない?
ビルドの仕方を変えるとかでいいのかも。 - 単体テスト作る
- TERASOLUNA Server Framework for Java 5をSpring Boot上に移植したい
- Docker