LoginSignup
12
11

More than 5 years have passed since last update.

Elasticsearch 5.0.0 で elasticsearch-head を Docker で利用する

Last updated at Posted at 2016-10-30

追記(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

使い方

bash
git clone https://github.com/kawasin73/elasticsearch_head_docker.git
cd elasticsearch_head_docker
docker-compose up

また、

bash
docker-compose up head

でも起動します。

http://localhost:9100 にブラウザからアクセスするとおなじみのあの画面が表示されます。

elasticsearch-head.png

フォルダ構成

bash
$ tree elasticsearch_head_docker
elasticsearch_head_docker
├── README.md
├── docker-compose.yml
├── es
│   ├── Dockerfile
│   └── elasticsearch.yml
└── head
    ├── Dockerfile
    └── Gruntfile.docker.js

ファイルの解説

es/Dockerfile

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

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

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-headGruntfile のままでは動かない(詳しくは後述)ので、独自のGruntfile.docker.jsを追加しています。 Gruntfile.js を上書きしても良いのですが、なんとなく嫌な感じがしたので、別名のファイルとして追加しています。

head/Gruntfile.docker.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

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上のボリュームをマウントすると高速化されると思います。

また、portsDockerfile上に記述しているので、docker-compose.ymlに記述する必要はないのですが、わかりやすいように記述しています。

参考URL

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11