在 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,将会显示那个熟悉的画面。
文件夹结构
$ 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 でディスク容量が足りなくなった時の対処法