写点什么

自己动手制作 elasticsearch-head 的 Docker 镜像

作者:程序员欣宸
  • 2022 年 8 月 05 日
  • 本文字数:3595 字

    阅读完需:约 12 分钟

自己动手制作elasticsearch-head的Docker镜像

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于 elasticsearch-head 插件

  • 通过 elasticsearch-head 插件可以更方便的查询 es,观察 es 状态,插件官方地址:https://github.com/mobz/elasticsearch-head

为什么要自己制作 elasticsearch-head 的 Docker 镜像

  • 原因很简单:elasticsearch-head 的官方 Docker 镜像只支持 elasticsearch5.x 版本,而现在 elasticsearch6.x 版本已经广泛使用了,以下就是 elasticsearch-head 官方的支持情况:


  1. 先去 hub.docker.com 上搜索,如下图,最后一次更新已经是两年前,只支持 elasticsearch5 版本:

  2. elasticsearch-head 官网说得很清楚,只支持 elasticsearch5、2、1 版本,并不支持 6,如下图:


  • 如果在 Docker 环境下运行 elasticsearch 版本是 6.x 版本,是没有与之匹配的 head 插件镜像的,此时的解决方法有以下三种:


  1. 把 head 插件搭建在 Docker 环境之外,也就是在物理机部署 head;

  2. 寻找非官方的 head 镜像;

  3. 掌握 head 插件镜像的制作方法,随时按照自己的需要制作支持任意版本的镜像;


今天的文章讨论的就是第三种方法:自己制作 elasticsearch-head 插件;

实战环境

  1. 操作系统:CentOS 7.6

  2. docker:17.03.2-ce

  3. docker-compose:version 1.23.2

不用 Docker 的时候,elasticsearch-head 是如何在物理机上部署的

  • 想做出 elasticsearch-head 镜像,先要对 elasticsearch-head 的常规部署方式有所了解,简单的罗列如下:


  1. 准备好 nodejs 环境;

  2. 下载 elasticsearch-head 源码;

  3. 安装 grunt-cli;

  4. 安装 elasticsearch-head;

  5. 用 grunt 命令启动;


编写 Dockerfile 文件

  • 前面已清楚了 head 插件的常规部署流程,接下来的事情就简单了,按照上述流程制作 Dockerfile,制作之前要注意以下几点:


  1. 基础镜像选哪个?我这里选择的是 nodejs 的官方镜像,这样就可以不用搭建 nodejs 环境了,最好选择 alpine 版本,这样的镜像体积更小;

  2. 多个 shell 命令的操作,尽量用**&&**连接起来,这样生成的镜像 layer 数更少,体积也会更小;

  3. head 插件的源码地址,我选用了 master 版本的地址,您可以根据自己的需要改成指定的分支;


  • 完整的 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 && \#安装gruntnpm install -g grunt-cli && \#安装headnpm install
#设置默认工作目录为解压后的源码文件夹WORKDIR $SRC_DOWN_PATH/elasticsearch-head-master
#保留9100端口EXPOSE 9100
#启动时即启动head服务CMD [ "grunt", "server" ]
复制代码

构建镜像

  • 在 Dockerfile 所在目录执行以下命令即可构建镜像:


docker build -t bolingcavalry/elasticsearch-head:6 .
复制代码


构建的过程中,执行 npm install 的时候会在 github 下载源码,此时有很大概率超时报错退出,多重试几次是可以成功的;


  • 构建成功后,执行命令 docker history bolingcavalry/elasticsearch-head:6 查看构建信息,如下:


[root@hedy head]# docker history bolingcavalry/elasticsearch-head:6IMAGE               CREATED             CREATED BY                                      SIZE                COMMENTe6833fce7a81        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
复制代码

验证镜像

  • 接下来在 Docker 上部署 elasticsearch+elasticsearch-head,验证做好的镜像是否好用,创建 docker-compose.yml 文件,内容如下:


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
复制代码


  • 在 docker-compose.yml 文件所在目录下执行命令 docker-compose up -d,即可创建 yml 文件中编排的容器,如下:


[root@hedy temp]# docker-compose up -dCreating network "temp_esnet" with the default driverCreating volume "temp_esdata2" with local driverCreating volume "temp_esdata1" with local driverCreating elasticsearch  ... doneCreating head           ... doneCreating elasticsearch2 ... done
复制代码


  • 假设 docker 所在电脑的 IP 地址是 192.168.1.101,如下图,在浏览器访问此地址可以查看 es 的信息:http://192.168.1.101:9200


  • 看到上述信息表示 es 启动成功了;

  • 如下图,elasticsearch-head 的访问地址是:http://192.168.1.101:9100


  • 创建索引、文档,再在 head 页面上查看一切正常,如下图,与物理机环境无异:


将镜像提交到 hub.docker.com

  • 前面构建好的镜像只存在本地电脑,我们可以将其提交到 docker 仓库给更多用户使用:


  1. 提交镜像到 hub.docker.com 网站,需要用到该网站的账号,请确保您已经在此网站注册过;

  2. 执行 docker login 登录,期间会要求输入用户名和密码;

  3. 执行命令 docker push bolingcavalry/elasticsearch-head:6,即可将本地镜像 push 到 hub.docker.com;

  4. 注意镜像名称的前缀,例如我这里的前缀是 bolingcavalry,要和账号保持一致;

  5. 提交成功后,在 hub.docker.com 网站即可看到此镜像,如下图,此时任何人都可以 pull 来下使用了:


  • 至此,整个 head 插件的镜像制作实战已完成,希望能给您提供参考,做出更适合自己的定制镜像;

欢迎关注 51CTO 博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

发布于: 刚刚阅读数: 4
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
自己动手制作elasticsearch-head的Docker镜像_Java_程序员欣宸_InfoQ写作社区