在 Docker 中使用 Elasticsearch 5.0.0 的 elasticsearch-head

补充(2017/01/12)

看起来elasticsearch-head已经适配了Docker。

docker pull mobz/elasticsearch-head

DockerHub:https://hub.docker.com/r/mobz/elasticsearch-head/
拉取请求:https://github.com/mobz/elasticsearch-head/pull/296

首先

elasticsearch-head 是一个方便的插件,可以通过图形用户界面操作 Elasticsearch。但自从 Elasticsearch 5.0.0 起,该插件已不再可用。

在Elasticsearch 5.0中,无法使用网站插件。

使用Elasticsearch 5.0版本一同运行站点插件。

据说 Elasticsearch-head 插件在Elasticsearch 5.0 中不再可用,因为它依赖的 site 插件将被移除。

因此,在使用elasticsearch-head时,需要启动一个独立的web服务器。

服务器的启动方法已在elasticsearch-head的自述文件中记录。

这次,我想要将所有的 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,将会显示那个熟悉的画面。

elasticsearch-head.png

文件夹结构

$ 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 -> elasticSearch配置文件

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),仅允许来自本地主机的访问。

主/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,但是我对此有些不爽,所以我们选择添加一个具有不同文件名的文件。

头部/Gruntfile.docker.js

// 省略
        connect: {
            server: {
                options: {
                    port: 9100,
                    base: '.',
                    keepalive: true,
                    hostname: '0.0.0.0' // <- added
                }
            }
        }
// 省略

在Docker容器中运行grunt server,所以需要进行设置以接受广泛的主机名。
除了主机名以外,其余部分都是从原始的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"

我认为在Docker虚拟机上挂载卷会加速。

另外,由于端口已在Dockerfile上进行了描述,所以没有必要在docker-compose.yml文件中再次描述,但出于易于理解的目的,我们仍然进行了描述。

请您提供相关的URL链接。

    • elasticsearch-head

 

    • Elasticsearch 5.0とともにsite pluginを動かす

 

    Docker for Mac でディスク容量が足りなくなった時の対処法
广告
将在 10 秒后关闭
bannerAds