通过elasticsearch-head插件可以更方便的查询es,观察es状态,插件官方地址:https://github.com/mobz/elasticsearch-head
原因很简单:elasticsearch-head的官方Docker镜像只支持elasticsearch5.x版本,而现在elasticsearch6.x版本已经广泛使用了,以下就是elasticsearch-head官方的支持情况:
如果在Docker环境下运行elasticsearch版本是6.x版本,是没有与之匹配的head插件镜像的,此时的解决方法有以下三种:
今天的文章讨论的就是第三种方法:自己制作elasticsearch-head插件;
想做出elasticsearch-head镜像,先要对elasticsearch-head的常规部署方式有所了解,简单的罗列如下:
更多部署elasticsearch-head的详情请参考《Linux环境快速搭建elasticsearch6.5.4集群和Head插件》;
前面已清楚了head插件的常规部署流程,接下来的事情就简单了,按照上述流程制作Dockerfile,制作之前要注意以下几点:
完整的Dockerfile内容如下,每一行都有详细的注释,就不多赘述了:
#Docker image of elasticsearch-head
# VERSION 6
# Author: bolingcavalry
#基础镜像使用node:10.15.0,以便通过npm来安装head插件
FROM node:10.15.0-alpine
#作者
MAINTAINER BolingCavalry <zq2599@gmail.com>
#定义下载源文件的路径
ENV SRC_DOWN_PATH /usr/src/app
#创建文件夹用于保存下载的源码
RUN mkdir -p $SRC_DOWN_PATH && \
#进入该文件夹
cd $SRC_DOWN_PATH && \
#下载源码
wget https://codeload.github.com/mobz/elasticsearch-head/zip/master && \
#解压
unzip master && \
#解压后,压缩文件可以删除了
rm master && \
#进入解压后的文件夹
cd elasticsearch-head-master && \
#设置为taobao,加速npm安装速度
npm config set registry http://registry.npm.taobao.org && \
#安装grunt
npm install -g grunt-cli && \
#安装head
npm install
#设置默认工作目录为解压后的源码文件夹
WORKDIR $SRC_DOWN_PATH/elasticsearch-head-master
#保留9100端口
EXPOSE 9100
#启动时即启动head服务
CMD [ "grunt", "server" ]
docker build -t bolingcavalry/elasticsearch-head:6 .
构建的过程中,执行npm install的时候会在github下载源码,此时有很大概率超时报错退出,多重试几次是可以成功的;
[root@hedy head]# docker history bolingcavalry/elasticsearch-head:6
IMAGE CREATED CREATED BY SIZE COMMENT
e6833fce7a81 9 hours ago /bin/sh -c #(nop) CMD ["grunt" "server"] 0 B
34889db72a32 9 hours ago /bin/sh -c #(nop) EXPOSE 9100/tcp 0 B
761b38387909 9 hours ago /bin/sh -c #(nop) WORKDIR /usr/src/app/ela... 0 B
893cec2c77e6 9 hours ago /bin/sh -c mkdir -p $SRC_DOWN_PATH && cd $... 139 MB
ead96e1a5663 9 hours ago /bin/sh -c #(nop) ENV SRC_DOWN_PATH=/usr/... 0 B
4648dcf3c904 9 hours ago /bin/sh -c #(nop) MAINTAINER BolingCavalr... 0 B
288d2f688643 4 weeks ago /bin/sh -c #(nop) CMD ["node"] 0 B
<missing> 4 weeks ago /bin/sh -c apk add --no-cache --virtual .b... 5.08 MB
<missing> 4 weeks ago /bin/sh -c #(nop) ENV YARN_VERSION=1.12.3 0 B
<missing> 4 weeks ago /bin/sh -c addgroup -g 1000 node && ad... 61.2 MB
<missing> 4 weeks ago /bin/sh -c #(nop) ENV NODE_VERSION=10.15.0 0 B
<missing> 5 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0 B
<missing> 5 weeks ago /bin/sh -c #(nop) ADD file:2ff00caea4e83df... 4.41 MB
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.4
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.4
container_name: elasticsearch2
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
head:
image: bolingcavalry/elasticsearch-head:6
container_name: head
ports:
- 9100:9100
networks:
- esnet
[root@hedy temp]# docker-compose up -d
Creating network "temp_esnet" with the default driver
Creating volume "temp_esdata2" with local driver
Creating volume "temp_esdata1" with local driver
Creating elasticsearch ... done
Creating head ... done
Creating elasticsearch2 ... done
看到上述信息表示es启动成功了;
前面构建好的镜像只存在本地电脑,我们可以将其提交到docker仓库给更多用户使用:
至此,整个head插件的镜像制作实战已完成,希望能给您提供参考,做出更适合自己的定制镜像;