Spring Boot on Docker for Windowsを目指したメモ

GW中にSpring Bootで作ったアプリをDocker上で動かそうと思い立ったので、 やったことのメモ。 Spring BootもDockerも初めて触ったので情報が正しいかはわからないが、備忘録がてら残しておく。 やったことの詳細はそのうちまとめたい。まとめていけたらいいなぁ。

やりたかったこと

Spring BootでWebアプリケーションを作ってみたい。
それをDocker上で動かしたい。(AWSGCPでもDocker利用できるみようだし、APサーバ立てるより楽にならないかなー)
でも手元にはWindowsマシンしかない。Linuxデュアルブートしてもいいけど、めんどくさいからそのまま使いたい。

⇒Spring Boot on Docker for Windowsでやってみよう。

最終的に使用した環境・ソフトウェア一覧など

作ったもの

ソース類はここに置いた。

やったこと

  1. Eclipse環境の準備
    PleiadesをDLして解凍しただけ。
    たしか、Windows 64bit StandardEditionのJava
    JDKはもとからインストール済みだったので省略。

  2. Spring Bootでアプリを作る

    1. ResponseBodyを直接指定して、単に文字列を返すアプリ
      公式のサンプル通りに。
    2. Spring MVC & Thymeleafで簡単な画面を作る
      画面遷移込みで。名前を入れて、「Hello, 名前!」を表示するだけ。
    3. 折角なのでBootstrapを使ってCSS設定
      実際にはHonokaにした。なんとなく。
      結局日本語使ってないけど。

    4. MyBatis3でDBアクセス
      Helloした名前とその回数・最終アクセス日時を保存する。
      MyBatisがspring-boot用のstarterを出しているのでそれを利用。

    5. 実行可能jarにして試してみる。
      公式のリファレンスみつつ。

  3. 作ったアプリをDockerで動かす。

    1. DockerをWindowsに入れる。
      1. Hyper-Vを有効にする。
        http://ascii.jp/elem/000/000/913/913933/index-2.html
      2. Docker for Windowsのインストール
      3. とりあえずubuntuでも動かしてみる 上記2つ目のサイトの2ページ目にある感じで。
        Javaのインストールを手動で頑張ってみた。めんどい。
    2. Docker上にMySQLを構築する
      とりあえずホストマシン(Windows10Pro)上のDBサーバにつなぐつもりだったが、
      ゲスト to ホストの通信はめんどくさそう。どうせならDocker上にMySQL建てよう。
      1. Docker Hubにmysqlのリポジトリがあったのでそのまま使う。
      2. ホストマシンからmysqlクライアントで接続して、動作確認用のDDLを流して使えることを確認。
        そのために、ポート3306をホストに公開してコンテナを再作成した。
    3. Spring BootアプリをDocker上で動かす
      1. Spring.ioのガイドに従って。
        アプリ構築部分はすでに作っているので省略。
        • Dockerfileを使ってイメージを作成。
          ただしイメージのビルドはdocker buildで実施。なんとなく。
          MavenやGradleでビルドする(というかビルドファイルを残しておく)べきだった気もする。
          Dockerfileが残ってればいいか。
        • 作成したイメージからdocker run。
          ポート8080をホストに公開する。(動作確認をホストマシンから実施するので)
      2. MySQLにつながらないのでどうにかする。
        DBサーバのアドレスがlocalhostのままだった。
        MySQLのコンテナのIPを調べる。
        docker exec [container_id] hostname -i
        本当はIP固定にしないと。ネットワークを自分で構成しないといけない様子。
        http://qiita.com/paihu/items/17aa47906dd2bf935a25
        これはまた今度。
      3. 動作確認。 ホストマシンからhttp://localhost:8080にアクセス。動くことを確認。
        一旦とめたら、次はコンテナをdocker startしてやればいい様子。

         docker container list -a  
         dokcer start [container_id]
        

次の目標

  • Spring Boot
    • TERASOLUNA Server Framework for Java 5をSpring Boot上に移植したい
      TERAのpomがSpring-boot-starterに依存しているっぽいので、少し工夫すればいける?いけない?
      ビルドの仕方を変えるとかでいいのかも。
    • 単体テスト作る
  • Docker
    • 固定IPにする
    • AWSとかGCPのDocker上に移植してみる?