Less is Best

rubyが好き。技術の話とスタートアップに興味があります。

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"]

先人の知恵を借りながら作ってみました。

arcus-io/docker-elasticsearch

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を使えるようになりました。 色々と遊んでみようと思います。