始めに
Dokcer上で稼働しているWASとFlaskを連動させてみました
FlaskからWASに向けてHTTPリクエストを投げてJSONのデータを取得してみました
前提
開発環境
- Windows10 pro
- Docker for windows
- WAS Liberty
- Python + Flask
DOckerの構成
WASとFlaskのdocker-compose.ymlは別にしています
異なるdocker-compose.yml同士のContainerを通信させる設定について
異なるdocker-compose.yml同士のContainerを通信させる必要があるので、自前のnetwork構成を定義します
具体的には
- docker network createコマンドで新規ネットワークを作成する
- 新設したネットワーク構成を反映させるため、docker-compose.ymlを修正する
新規ネットワークを作成
dockerで新規ネットワークを作成する方法はDocker-docs-daを読んでみてください
docker-compose.ymlの修正
新規設定したdockerのネットワーク設定を追加します
GitHub上のソースの差分を参考にしてみてください
アプリケーションの修正
#WASのアプリケーションの修正
Java:WASをDockerで起動させ、自前のアプリケーションをデプロイするをJSON形式でレスポンス情報を返すように修正しました。
詳細はGitHub上のソースを見てください
- https://github.com/triple4649/wassample/blame/master/src/main/java/jpn/JapaneseAnalyser.java
- https://github.com/triple4649/wassample/blame/master/src/main/java/router/SampleRooter.java
#Flaskのアプリケーションの修正
主な修正ポイントは以下の通りです
- WASのWebアプリケーションに対してGetリクエストを投げ、データを受信する処理を追加した
(詳細はGitHub上のソースを見てください : https://github.com/triple4649/pythonweb/blame/master/app.py)
なお、ここでのソースの修正ポイントはWASに投げるURLを「コンテナ名+Docker上で起動しているポート名」で指定する点です。
Docker上に新規作成したネットワークはDNSの代わりとなり、コンテナのIPアドレスとコンテナ名を紐づけてくれるため、URLを生成するときIPアドレスの代わりにコンテナ名でアクセスできるというわけですね