DockerでElasticSearchサーバーを立てる
全文検索エンジンであるElasticSearchをRailsから使ってみようかと思うので、ちょっと弄って具合を確かめてみようと思います。そのためには、まずはElasticSearchのインストールから。せっかくなので、Dockerを使ってインストールして、外部サービスのような形で使って行こうと思います。
ちなみにソースはGithubにあげております。
まずはDockerfile
FROM ubuntu RUN dpkg-divert --local --rename --add /sbin/initctl RUN ln -s /bin/true /sbin/initctl RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update RUN apt-get upgrade -y # Tool Install RUN apt-get install -y git wget vim # Java install RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7u25-b15/server-jre-7u25-linux-x64.tar.gz" -O "server-jre-7u25-linux-x64.tar.gz" RUN mkdir /usr/java RUN tar xzf server-jre-7u25-linux-x64.tar.gz -C /usr/java/ # Elastic Search install ENV JAVA_HOME /usr/java/jdk1.7.0_25 RUN wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.deb RUN dpkg -i elasticsearch-0.90.7.deb RUN "export JAVA_HOME=/usr/java/jdk1.7.0_25" | tee -a /etc/default/elasticsearch RUN service elasticsearch stop # Elastic Plugin Install RUN JAVA_HOME=/usr/java/jdk1.7.0_25 /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/1.6.0 RUN AVA_HOME=/usr/java/jdk1.7.0_25 /usr/share/elasticsearch/bin/plugin -install royrusso/elasticsearch-HQ # Elastic Search Config ADD elasticsearch.yml /etc/elasticsearch/elasticsearch.yml # Docker Option EXPOSE 9200 CMD ["/usr/share/elasticsearch/bin/elasticsearch","-f"]
先人の知恵を借りながら作ってみました。
Elasticsearchとkuromojiでちゃんとした日本語全文検索をやるメモ
->ここの記事とても分かりやすくてよい。 ElasticSearchがPort 9200番で動いていること、日本語の全文検索をしたいと思っていたので、PluginとしてKuromojiを入れていること、管理画面として奇麗なUIだと思ったのでとりあえずelasticsearch-HQを入れていることが特徴でしょうか。
あと、設定ファイルは自由に編集してからビルド掛けられるようにしてます。
使い方
まずはgithubからソースを落としてきます。
git clone git@github.com:yss44/docker_elasticsearch.git
次に、ビルドスクリプトのユーザー名を書き換えます。
cd docker_elasticsearch
vim bin/build bin/run
bin/build
#!/bin/bash USER="yoshiso" #=> 自分の名前に変更 #Workin directory cd `/usr/bin/dirname $0` cd .. WORKING_DIR=`pwd` docker build -t $USER/elasticsearch $WORKING_DIR
bin/run
#!/bin/bash USER="yoshiso" ID=$(docker run -d -p 9200:9200 -name elasticsearch $USER/elasticsearch) >> /dev/null IP=$(docker inspect -format="{{ .NetworkSettings.IPAddress }}" $ID) echo "elasticsearch running at : $IP"
次に、スクリプトに実行権限を与えます。
chmod +x bin/*
これで、セットアップは終了。あとはビルドして(./run/build
)コンテナを起動する(./bin/run
)だけです。
./bin/build ./bin/run
実行すると、起動したコンテナのIPアドレスが表示されるようになってますので、そこにアクセス or localhostにポートフォワーディングしているので、localホストからアクセスします。
$ curl -XGET localhost:9200/_cluster/health?pretty { "cluster_name" : "elasticsearch", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0 }
と、JSON形式でデータが返ってくるのが分かるかと思います。"status":"green"
で無事起動していますね。
これでカンタンにElasticSearchを使えるようになりました。 色々と遊んでみようと思います。