Dockerでの動作確認
次に、ローカルのDockerで動作確認をしましょう(図14)。
Dockerについても連載第3回、第4回で紹介しているので、詳細については、そちらを参照してください。現在は、Windows/Macでは、Docker for Mac/Docker for Windowsを使うのが簡単です。MacへのDocker Machineインストールは、基本的にここに置かれているdmgファイルをインストールするだけなので手順については省略します。Dockerのドキュメントに注意点があるのでインストール前にチェックしておくと良いでしょう。Dockerで動かす際の手順は以下のとおりとなります。
- (1)Play Frameworkの機能を使って、application secretという暗号化のための情報を作成しておく
- (2)application secretをwatson-env.confに設定する
- (3)Play Frameworkの機能を使って、アプリケーションをzipファイルに固める
- (4)Dockerfileと(3)の内容から、Dockerイメージを作成する
- (5)Docker上で(4)で作成したイメージを実行する
それでは順番に手順を見ていきましょう。
application secretの生成
Play Frameworkで作成したアプリケーションを本番環境で稼働する場合には、application secretを生成する必要があります。この値はPlay Framework内で暗号化が必要な場合に使用されます。さきほど、local-run.shを実行している状態だと思うので、Ctrl+Cを押して停止します。次にbin/activator(Windowsの場合はbin/activator.bat)に、引数playGenerateSecretを追加して実行します。
$ bin/activator playGenerateSecret [info] Loading global plugins from /Users/shanai/.sbt/0.13/plugins [info] Loading project definition from /private/tmp/cz-mbed7/project [info] Set current project to watsonproxy (in build file:/private/tmp/cz-mbed7/) [info] Generated new secret: ;[PZ?o]@mWp=a[SQ_cCIsdfLb:lJ3XejKLTIF3i79_Hdf0gZUcg49I0SK=9wnuj[ [success] Total time: 0 s, completed 2016/07/06 18:11:23
「Generated new secret: の右側に表示された文字列を控えておきます(コマンドを実行するごとに異なる値が生成されます。なお記事上は改行しているように見えるかもしれませんが、実際は1行です)。この値は他の人の目に触れないようにしてください(万が一触れてしまったら再生成します)。この値を、watson-env.confファイルの以下の行に指定すれば、設定は完了です。
APP_SECRET='Playframework app secret'
また、最後のDOCKER_NSに、BluemixのDockerレジストリの名前空間を指定します(連載の第3回ではsusumutani3の部分にあたります)。
DOCKER_NS='Bluemix docker name space'
イメージの生成
アプリケーションを含んだDockerイメージの生成は、docker-build.shで行えます。このコマンドでアプリケーションはzipファイルにまとめられて、Dockerイメージが生成されます。
$ ./docker-build.sh [info] Loading global plugins from /Users/shanai/.sbt/0.13/plugins [info] Loading project definition from /private/tmp/cz-mbed7/project [info] Set current project to watsonproxy (in build file:/private/tmp/cz-mbed7/) [info] Packaging /private/tmp/cz-mbed7/target/scala-2.11/watsonproxy_2.11-1.0-SNAPSHOT-sources.jar ... [info] Done packaging. ... Step 6 : ENTRYPOINT /bin/bash -c /opt/watsonproxy/launch.sh ---> Running in 5f89dc7ffadb ---> 42dac4f09944 Removing intermediate container 5f89dc7ffadb Successfully built 42dac4f09944
実行
それでは実行します。実行は、docker-local-run.shで行えます。
$ ./docker-local-run.sh f15f50c419070b3f2f10d2c1722382393ea10e65cec78862c0a44d772fd4d47a
まずはログを確認しておきましょう。上記のコマンドで表示された長い16進数文字列が、実行中のdockerコンテナのidなので、これを指定して(コピー・ペーストしてください)、docker logsコマンドを実行します。
$ docker logs f15f50c419070b3f2f10d2c1722382393ea10e65cec78862c0a44d772fd4d47a [info] play.api.Play - Application started (Prod) [info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:80
リクエスト待ちになっていることが分かります。Dockerでの実行の際は、80ポートで待つようになっているので、mbedのプログラムは以下のように:9000の部分を削除して、コンパイル、書き込みを行ってからリセットしておきます。
int responseCode = httpClient.post("http://192.168.0.10/", request, &response);
これまで同様、joystickボタンを押して「明るくして」と呼びかけてみてください。うまく認識されれば、LED4が点灯します。認識状況はdocker logsで確認できます。
$ docker logs f15f50c419070b3f2f10d2c1722382393ea10e65cec78862c0a44d772fd4d47a
[info] play.api.Play - Application started (Prod)
[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:80
Start index
wav: /tmp/2203062852583053679.wav
response: '{"results":[{"alternatives":[{"confidence":0.717,"transcript":"明るく して "}],"final":true}],"result_index":0}'
transcript: '"明るく して "'
command: '明るくして'
