Elasticsearch 1.4.0 を Docker で動かしてみる -- boot2docker

準備の準備

まずは、boot2dockerをバージョンアップする。

OSX Installer

インストーラを新しくする。

https://github.com/boot2docker/osx-installer/releases/latest

DawnLoad後、Installする。

その後、以下のコマンドを実行する。
この辺りは、Dockerのサイトにのっているとうり。。

MBA20120331:dockerfile-elasticsearch4 guutara$ boot2docker stop
MBA20120331:dockerfile-elasticsearch4 guutara$ boot2docker download
Latest release for boot2docker/boot2docker is v1.3.1
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.3.1/boot2docker.iso
	to /Users/guutara/.boot2docker/boot2docker.iso
MBA20120331:dockerfile-elasticsearch4 guutara$ boot2docker start
Waiting for VM and Docker daemon to start...
.....................ooooooooooooooooooooooooo
Started.
Writing /Users/guutara/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/guutara/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/guutara/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/guutara/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

使う前に、上記、3つの変数は、設定しておこう。。

Docker Image の作成。

DockerFile とかを、適当に作って置いたので、これを使っている。
dockerfile-elasticsearch4

まずは、boot2dockerを起動する。

MBA20120331:dockerfile-elasticsearch4 guutara$ boot2docker start
Waiting for VM and Docker daemon to start...
.....................ooooooooooooooooooooooooo
Started.
Writing /Users/guutara/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/guutara/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/guutara/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/guutara/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

MBA20120331:dockerfile-elasticsearch4 guutara$ export DOCKER_HOST=tcp://192.168.59.103:2376
MBA20120331:dockerfile-elasticsearch4 guutara$     export DOCKER_CERT_PATH=/Users/guutara/.boot2docker/certs/boot2docker-vm
MBA20120331:dockerfile-elasticsearch4 guutara$     export DOCKER_TLS_VERIFY=1
MBA20120331:dockerfile-elasticsearch4 guutara$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Dockerfile のあるディレクトリで行う。

MBA20120331:dockerfile-elasticsearch4 guutara$ pwd
/Users/guutara/git/dockerfile-elasticsearch4
MBA20120331:dockerfile-elasticsearch4 guutara$ ls
Dockerfile  README.md  config  data
MBA20120331:dockerfile-elasticsearch4 guutara$ docker build -t guutara/elasticsearch:1.4.0 .
Sending build context to Docker daemon 29.46 MB
Sending build context to Docker daemon 
Step 0 : FROM dockerfile/java:oracle-java7
 ---> a643f54fef40
.
.
.
Successfully built cffbdbd80f9c
MBA20120331:dockerfile-elasticsearch4 guutara$ 

MBA20120331:dockerfile-elasticsearch4 guutara$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
guutara/elasticsearch   1.4.0               cffbdbd80f9c        About a minute ago   755.9 MB
guutara/kibana          4.0.0-BETA1         e3c7448aefd5        3 weeks ago          766.4 MB
guutara/elasticsearch   1.3.2               e1b42108cc83        3 weeks ago          755.5 MB
dockerfile/java         oracle-java7        a643f54fef40        4 weeks ago          722 MB
chung/centos7-up        latest              3a22ebba07c7        7 weeks ago          288.3 MB
centos                  centos7             70214e5d0a90        9 weeks ago          224 MB

これで、Imageは、作成完了。

Container の作成から起動確認

Docker -name で、名前をつけて作成して起動する。

MBA20120331:dockerfile-elasticsearch4 guutara$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
MBA20120331:dockerfile-elasticsearch4 guutara$ docker run -d -p 9200:9200 -p 9300:9300 -name el1.4-up guutara/elasticsearch:1.4.0
Warning: '-name' is deprecated, it will be replaced by '--name' soon. See usage.
3338665c2dfb431de5f51889436958e0954e5ed3f37277e5d1f19dadaa95a561
MBA20120331:dockerfile-elasticsearch4 guutara$ docker ps
CONTAINER ID        IMAGE                         COMMAND                CREATED             STATUS              PORTS                                            NAMES
3338665c2dfb        guutara/elasticsearch:1.4.0   "/elasticsearch/bin/   8 seconds ago       Up 7 seconds        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   el1.4-up            

DOCKER_HOSTのIPを、何度も叩くのは、面倒なので DOCKER_HOST_IP に設定しておく。

MBA20120331:data guutara$ export DOCKER_HOST_IP=192.168.59.103
MBA20120331:data guutara$ echo $DOCKER_HOST_IP
192.168.59.103


まずは、起動を確認。

MBA20120331:dockerfile-elasticsearch4 guutara$ curl http://$DOCKER_HOST_IP:9200/
{
  "status" : 200,
  "name" : "Kristoff Vernard",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.4.0",
    "build_hash" : "bc94bd81298f81c656893ab1ddddd30a99356066",
    "build_timestamp" : "2014-xx-xxxxxxxx",
    "build_snapshot" : false,
    "lucene_version" : "4.10.2"
  },
  "tagline" : "You Know, for Search"
}

Index作成と、データを検索してみる。使ったのは、kibanaで提供されているデータ。
curl -O http://www.elasticsearch.org/guide/en/kibana/current/snippets/shakespeare.jsonで、データを取得しておく。
先ほどの、gitのdata配下には、データと以下の、しょぼい、shがあるので、それを使っている。

MBA20120331:data guutara$ cat curl-shakespeare 
#/bin/sh
#

echo "Start Index Create" 
curl -XPUT http://$DOCKER_HOST_IP:9200/shakespeare -d '
{
 "mappings" : {
  "_default_" : {
   "properties" : {
    "speaker" : {"type": "string", "index" : "not_analyzed" },
    "play_name" : {"type": "string", "index" : "not_analyzed" },
    "line_id" : { "type" : "integer" },
    "speech_number" : { "type" : "integer" }
   }
  }
 }
}
';

echo

echo "Start Bulk Load"

curl -XPUT  http://$DOCKER_HOST_IP:9200/_bulk --data-binary @shakespeare.json

echo
echo "End "

MBA20120331:data guutara$ sh curl-shakespeare > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   305  100    21  100   284     18    255  0:00:01  0:00:01 --:--:--   255
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 33.6M  100 9791k  100 24.0M   408k  1027k  0:00:23  0:00:23 --:--:--     0

確認してみる。

Indexの確認。

MBA20120331:data guutara$ curl -XGET http://$DOCKER_HOST_IP:9200/_aliases?pretty
{
  "shakespeare" : { }
}


データの確認。

MBA20120331:data guutara$ curl -XGET http://$DOCKER_HOST_IP:9200/shakespeare/_search?
{"took":78,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":111396,"max_score":1.0,"hits":[{"_index":"shakespeare","_type":"line","_id":"46925","_score":1.0,"_source":{"line_id":46926,"play_name":"Julius Caesar","speech_number":13,"line_number":"","speaker":"BRUTUS","text_entry":"Exit LUCIUS"}},{"_index":"shakespeare","_type":"line","_id":"46932","_score":1.0,"_source":{"line_id":46933,"play_name":"Julius Caesar","speech_number":13,"line_number":"2.1.67","speaker":"BRUTUS","text_entry":"Are then in council; and the state of man,"}},{"_index":"shakespeare","_type":"line","_id":"46937","_score":1.0,"_source":{"line_id":46938,"play_name":"Julius Caesar","speech_number":14,"line_number":"2.1.71","speaker":"LUCIUS","text_entry":"Who doth desire to see you."}},{"_index":"shakespeare","_type":"line","_id":"46944","_score":1.0,"_source":{"line_id":46945,"play_name":"Julius Caesar","speech_number":18,"line_number":"2.1.78","speaker":"LUCIUS","text_entry":"By any mark of favour."}},{"_index":"shakespeare","_type":"line","_id":"46949","_score":1.0,"_source":{"line_id":46950,"play_name":"Julius Caesar","speech_number":19,"line_number":"2.1.82","speaker":"BRUTUS","text_entry":"When evils are most free? O, then by day"}},{"_index":"shakespeare","_type":"line","_id":"46951","_score":1.0,"_source":{"line_id":46952,"play_name":"Julius Caesar","speech_number":19,"line_number":"2.1.84","speaker":"BRUTUS","text_entry":"To mask thy monstrous visage? Seek none, conspiracy;"}},{"_index":"shakespeare","_type":"line","_id":"46956","_score":1.0,"_source":{"line_id":46957,"play_name":"Julius Caesar","speech_number":19,"line_number":"","speaker":"BRUTUS","text_entry":"Enter the conspirators, CASSIUS, CASCA, DECIUS BRUTUS, CINNA, METELLUS CIMBER, and TREBONIUS"}},{"_index":"shakespeare","_type":"line","_id":"46963","_score":1.0,"_source":{"line_id":46964,"play_name":"Julius Caesar","speech_number":22,"line_number":"2.1.95","speaker":"CASSIUS","text_entry":"You had but that opinion of yourself"}},{"_index":"shakespeare","_type":"line","_id":"46968","_score":1.0,"_source":{"line_id":46969,"play_name":"Julius Caesar","speech_number":25,"line_number":"2.1.100","speaker":"BRUTUS","text_entry":"He is welcome too."}},{"_index":"shakespeare","_type":"line","_id":"46970","_score":1.0,"_source":{"line_id":46971,"play_name":"Julius Caesar","speech_number":27,"line_number":"2.1.102","speaker":"BRUTUS","text_entry":"They are all welcome."}}]}}

まとめ

dockerfile/elasticsearch · GitHubを参考に、見よう見まねで、作ってみたけど、なんとか動いた。
boot2docker で、動かしてるけど、普通にDockerいれて物理で動かすならもっと違うやり方が出来ると思う。

ちなみに、データの永続化はしてないので、コンテナ消すと全てはなくなるのだよ。(笑)

あと、kibana4も、作ったのだけど、それは、また、気が向いた時にまとめるつもり。