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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 官方的elasticsearch-head的Docker镜像目前只支持到elasticsearch5.x版本,本文帮助大家掌握head插件镜像的制作方法,做出各种适合自己的版本

欢迎访问我的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版本:

在这里插入图片描述

  1. 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命令启动;

更多部署elasticsearch-head的详情请参考《Linux环境快速搭建elasticsearch6.5.4集群和Head插件》

编写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 && \
#安装grunt
npm install -g grunt-cli && \
#安装head
npm 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: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

验证镜像

  • 接下来在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 -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
  • 假设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插件的镜像制作实战已完成,希望能给您提供参考,做出更适合自己的定制镜像;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
19天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
3天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
19 3
docker push推送自己搭建的镜像
|
19天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
41 9
|
1月前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
1682 30
|
19天前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
42 4
|
1月前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
1月前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
150 2
|
1月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
148 1
|
1月前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
69 0