追記(2017/01/12)
どうやらelasticsearch-headでDocker対応したようです。
docker pull mobz/elasticsearch-head
DockerHub: https://hub.docker.com/r/mobz/elasticsearch-head/
PullRequest: https://github.com/mobz/elasticsearch-head/pull/296
はじめに
Elasticsearch をGUIで操作できる便利なプラグイン elasticsearch-head ですが、Elasticsearch 5.0.0 からは利用できなくなりました。
site plugin はElasticsearch 5.0では使えなくなります。
Elasticsearch 5.0とともにsite pluginを動かす
elasticsearch-head が依存していた site plugin
がElasticsearch5.0からは使えなくなるためのようです。
そのため、elasticsearch-head を利用する際は、独立したwebサーバーを立ち上げる必要があります。
サーバーの立ち上げ方は、elasticsearch-headのREADME に記載してあります。
今回は、elasticsearch などを全てDockerの上で動かしたいのでその方法を説明します。
ソースコードは、こちらにアップロードしています。
環境
- OS: macOS
- Docker for Mac: 1.12.1
- docker-compose: 1.8.0
使い方
git clone https://github.com/kawasin73/elasticsearch_head_docker.git
cd elasticsearch_head_docker
docker-compose up
また、
docker-compose up head
でも起動します。
http://localhost:9100
にブラウザからアクセスするとおなじみのあの画面が表示されます。
フォルダ構成
$ tree elasticsearch_head_docker
elasticsearch_head_docker
├── README.md
├── docker-compose.yml
├── es
│ ├── Dockerfile
│ └── elasticsearch.yml
└── head
├── Dockerfile
└── Gruntfile.docker.js
ファイルの解説
es/Dockerfile
FROM elasticsearch:5.0.0
RUN elasticsearch-plugin install analysis-kuromoji
RUN elasticsearch-plugin install analysis-icu
COPY elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml
elasticsearch:5.0.0
を利用します。その他のプラグインはお好みで入れてください。
また、elasticsearch.yml
を上書きしています。
es/elasticsearch.yml
network.host: 0.0.0.0
# this value is required because we set "network.host"
# be sure to modify it appropriately for a production cluster deployment
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: /https?:\/\/localhost(:[0-9]+)?/
最初の5行は、elasticsearch:5.0.0
イメージ内の/usr/share/elasticsearch/config/elasticsearch.yml
のコピペです。
ここ推奨されているように、cors (Cross-Origin Resource Sharing) を有効にして、ローカルホストからのアクセスのみを許可するようにします。
head/Dockerfile
FROM node:7.0.0
RUN npm install -g grunt-cli
WORKDIR /app
RUN git clone https://github.com/mobz/elasticsearch-head.git /app
RUN npm install
COPY Gruntfile.docker.js /app/Gruntfile.docker.js
EXPOSE 9100
CMD ["grunt", "server", "--gruntfile", "Gruntfile.docker.js"]
node:7.0.0
イメージを利用しています。elasticsearch-headの Gruntfile
のままでは動かない(詳しくは後述)ので、独自のGruntfile.docker.js
を追加しています。 Gruntfile.js
を上書きしても良いのですが、なんとなく嫌な感じがしたので、別名のファイルとして追加しています。
head/Gruntfile.docker.js
// 省略
connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '0.0.0.0' // <- added
}
}
}
// 省略
Dockerのコンテナ内で grunt server
を動かすので、hostname
を幅広く受け付けるように設定が必要です。
hostname
以外の部分については、元々のGruntfileからコピペしています。
docker-compose.yml
version: "2"
services:
es:
build:
context: "es/."
volumes:
- "~/.data/es/data:/usr/share/elasticsearch/data"
ports:
- "9200:9200"
- "9300:9300"
head:
build:
context: "head/."
depends_on:
- es
ports:
- "9100:9100"
Docker for Mac
はDockerVM上のボリュームの量を増やすことができません。Docker for Mac でディスク容量が足りなくなった時の対処法
そのため、macOS上のディレクトリをマウントしています。
その分速度は遅くなってしまいますので、Elasticsearch内にそれほどたくさんのデータを挿入しないのであれば、
volumes:
- "es-data:/usr/share/elasticsearch/data"
のようにDockerVM上のボリュームをマウントすると高速化されると思います。
また、ports
はDockerfile
上に記述しているので、docker-compose.yml
に記述する必要はないのですが、わかりやすいように記述しています。