対象読者
- 現場の技術者で、自社や自身のプロジェクトで検索システムを作成する必要のある方
- 環境差異の少ない検索システムを作成したい方
検証環境
- 使用言語とバージョン:Python 3.5.0
- 対応OS(バージョン):Mac、 Windows、Linux(Vagrantが動作する環境)
- 開発環境:Vagrant 1.8.5、Ubuntu Trusty 14.04 (LTS)、Docker 1.12
Dockerコンテナによる各システムの連携について
今回は検索機能を提供するElasticsearchとSlack上のUI提供部分を、コンテナによって連携する方法の紹介をします。これにより、システムの結合度が下がって変更や拡張に強い検索システムの提供が可能となります。
上図のように、検索用のコンテナを変えるだけで検索の内容を変えることもできますし、UI部分がSlackからLINEに移っても検索部分は再利用可能になっています。
仮想環境の設定
今回も仮想環境を使用するためVagrantを起動します。
まず、VagrantfileのIPアドレスを環境に応じて設定してください。他にVagrantを使用している場合は 同一のIPアドレスにならないようにしてください。
- 例:192.168.33.21
confing.vm.network "private_network", ip {your ip address}
第2回の記事で構築したVagrant環境のディレクトリに移動し、Vagrantを起動してください。
cd {your Vagrant folder} vagrant up
なお、第3回の記事で取得したWikipediaのデータは今回の記事でも使用するので、「{Vagrantのフォルダー}/elastic-search-docker_parallel/python/Data/split_data/」以下に分割されたJSONファイルがあるか確認してください。
確認できたら、以下のコマンドでVagrantで作成した環境に入ってください。
vagrant ssh cd /home/vagrant/elastic-search-docker_parallel/docker docker pull masayaresearch/elasticsearch_japanese_parallel
次に、第2回の記事で紹介したDocker環境の構築方法に沿ってDocker環境を構築してください。すでにDockerを起動できる環境をVagrant上で構築済みの方は必要ありません。
Slack用コンテナとElasticsearch用コンテナの連携
Slack用コンテナとElasticsearch用コンテナの連携を以下の手順で行います。
- Elasticsearchコンテナの起動
- Elasticsearchコンテナへのデータ登録
- SlackコンテナをElasticsearchコンテナと連携して起動
[1]Elasticsearchコンテナの起動
検索用のElasticsearchコンテナを先に起動し、検索システムを準備しておきます。「-v」のオプションで登録用のデータがあるフォルダを連携しています。第3回で使用したWikipediaのデータを使用して登録します。
docker run -d -v /home/vagrant/elastic-search-docker_parallel/python:/usr/share/elasticsearch/python --name elasticsearch_dialogue -p 9200:9200 -it masayaresearch/elasticsearch_japanese_parallel /sbin/init
Elasticsearchを起動するには、以下のコマンドを実行します。
docker exec -it elasticsearch_dialogue sh shell/elastic_search_setting.sh
すると、「sudo」のパスの入力が促されるので、sudoのパスである「e_pass」を入力してコマンドが通るようにします。
[sudo] password for elasticsearch:
[2] Elasticsearchコンテナへのデータ登録
検索用のElasticsearchコンテナにデータを登録し、検索できるようにしておきます。
「/usr/share/elasticsearch/python/Data/split_data」に第3回の記事で作成したデータが保存されているので、そのデータのディレクトリを指定します。
パイプ数と並列数は並列のためのパラメータになります。こちらも詳しい内容は第3回の記事に載せています。
- パイプ数:1
- 並列数:10
著者の環境では上のパラメータで試して約10秒で登録処理が終了したため、このパラメータでも問題ないと思われます。
docker exec -it elasticsearch_dialogue sh shell/elastic_regist_search_json_parallel.sh ${あなたが設定したいパイプ数} ${あなたが設定したい並列数} /usr/share/elasticsearch/python/Data/split_data
[3]SlackコンテナをElasticsearchコンテナと連携して起動
SlackコンテナとElasticsearchコンテナの連携部分です。
まずは今回の連携用Slackコンテナを取得します。
docker pull masayaresearch/slack_dialogue
次に、ElasticsearchコンテナとSlackコンテナを下記のコマンドで連携します。 「--link」のオプションで連携するコンテナを指定してElasticsearchコンテナと連携して起動しています。
docker run --link elasticsearch_dialogue -it masayaresearch/slack_dialogue bash