elasticsearch 시작하기

몇달전에 관심이 있었던것도 있고, 곧 있을 프로젝트도 그렇고 elasticsearch 를 공부해보기로 했다. ㅎ 배움의 즐거움이란 그리고 실무에 적용할 때, 그 희열이란, 장애가 나면 힘들지만, 그래도 좋다. ㅎ
이번에는 간단히 설치 정도만 알아보도록 하자. docker를 공부한 김에 docker container에 올려서, port forwarding도 하고, 밖에 안으로 call 하는것까지… ㅎㅎㅎ

Environment
Linux: ubuntu 14.04
Server IP(docker가 설치된): 192.168.0.11

먼저, ubuntu:14.04 image를 가지고, elasticsearch_installation 이름으로 container를 하나 만든다.
$ docker run -i -t –name elasticsearch_installation ubuntu:14.04 /bin/bash

root@04daa5ece77a:/# apt-get update
root@04daa5ece77a:/# apt-get install -y wget

헐~ JDK 설치를 수동으로 해야되네, wget으로 다운로드 받으려고 하는데, redirection 되는가봄… ㅡㅡ;;
openjdk를 설치하려다가, 수동으로 oracle jdk 설치하는걸로,,,
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
JDK가 설치되었다고 가정, 위치는 /app/jdk1.7.0_75

root@04daa5ece77a:/# mkdir app
root@04daa5ece77a:/# cd app
root@04daa5ece77a:/app/# mkdir download
root@04daa5ece77a:/app/download/# cd download
root@04daa5ece77a:/app/download/# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.1.tar.gz
root@04daa5ece77a:/app/download/# tar zxvf elasticsearch-1.5.1.tar.gz
root@04daa5ece77a:/app/download/# mv elasticsearch-1.5.1 ../
root@04daa5ece77a:/app/# cd ..
root@04daa5ece77a:/app/# vi ~/.profile
아래 두줄 추가하고, 저장하고 나옵니다.
JAVA_HOME=/app/jdk1.7.0_75
PATH=”$HOME/bin:$PATH:$JAVA_HOME/bin:$JAVA_HOME/bin”

PATH가 잘 되어 있는지, JAVA 실행하기
root@04daa5ece77a:/app/# source ~/.profile <= JAVA_HOME, PATH 적용
root@04daa5ece77a:/app/# java -version
root@04daa5ece77a:/app/# cd elasticsearch-1.5.1/bin
root@04daa5ece77a:/app/elasticsearch-1.5.1/bin/# ./elasticsearch
[2015-04-12 12:09:49,173][INFO ][node ] [Paladin] version[1.5.1], pid[30], build[5e38401/2015-04-09T13:41:35Z]
[2015-04-12 12:09:49,174][INFO ][node ] [Paladin] initializing …
[2015-04-12 12:09:49,181][INFO ][plugins ] [Paladin] loaded [], sites []
[2015-04-12 12:09:52,855][INFO ][node ] [Paladin] initialized
[2015-04-12 12:09:52,856][INFO ][node ] [Paladin] starting …
[2015-04-12 12:09:53,067][INFO ][transport ] [Paladin] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/172.17.0.5:9300]}
[2015-04-12 12:09:53,089][INFO ][discovery ] [Paladin] elasticsearch/_mT-dyZBT9GIEXj0sy-wEw
[2015-04-12 12:09:56,875][INFO ][cluster.service ] [Paladin] new_master [Paladin][_mT-dyZBT9GIEXj0sy-wEw][c2b5fbc3126d][inet[/172.17.0.5:9300]], reason
: zen-disco-join (elected_as_master)
[2015-04-12 12:09:56,898][INFO ][http ] [Paladin] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/172.17.0.5:9200]}
[2015-04-12 12:09:56,899][INFO ][node ] [Paladin] started
[2015-04-12 12:09:57,004][INFO ][gateway ] [Paladin] recovered [0] indices into cluster_state

elasticsear가 잘 실행되었네요~ ㅎ

container에서 나옵니다.
root@04daa5ece77a:/app/elasticsearch-1.5.1/bin/# exit

작업한 container를 docker image(IMAGE 이름: kevin/elasticsearch )로 commit하기
$ docker commit 04daa5ece77aff04b9d823fcf52132404fd386841fd01415bf6d4688a57fba62 kevin/elasticsearch

docker image를 확인, 잘 생성 ㅎㅎㅎ
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
kevin/elasticsearch latest 9fdb1a453f91 48 seconds ago 712.8 MB

container를 만드는데, port를 external 9200에서 internal 9200으로 설정하고 띄웁니다.
$ docker run -i -t -p 9200:9200 kevin/elasticsearch /bin/bash

root@c2b5fbc3126d:/# cd app/elasticsearch/bin
root@c2b5fbc3126d:/# source ~/.profile curl -X GET http://192.168.0.11:9200/
{
“status” : 200,
“name” : “Paladin”,
“cluster_name” : “elasticsearch”,
“version” : {
“number” : “1.5.1”,
“build_hash” : “5e38401bc4e4388537a615569ac60925788e1cf4”,
“build_timestamp” : “2015-04-09T13:41:35Z”,
“build_snapshot” : false,
“lucene_version” : “4.10.4”
},
“tagline” : “You Know, for Search”
}

위 메세지가 나오면 성공… ^^

Comment
물론, elasticsearch를 위한 dockerfile이 있어서, reference에 있는 걸로 설치해도 됨. 한방에 끝~ ㅎㅎㅎ
그런데, 위에서 한 것처럼 수동으로 설치해보았습니다. ㅎㅎㅎ 리눅스 내공이 부족해서 container에 attach로 들어가면, 자동으로 .profile이 읽어져야 하는데, 못 읽어져서, source .profile를 해서 JAVA_HOME, PATH를 세팅한 후 elasticsearch를 실행했습니다. ㅎㅎㅎ 그래도 이 정도면, 흡족… ㅎㅎㅎ

Reference
https://github.com/dockerfile/elasticsearch