Docker 中部署 ElasticSearch 以及安装 IK 分词器插件

本贴最后更新于 1753 天前,其中的信息可能已经渤澥桑田

什么是 Elasticsearch

Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTFul Web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在 Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby 和许多其他语言中都是可用的。根据 DB-Engines 的排名显示,Elasticsearch 是最受欢迎的企业搜索引擎,其次是 Apache Solr,也是基于 Lucene。

传统方式安装 Elasticsearch

传统的安装方式都是用户通过 Elasticsearch 官网下载安装包,然后在宿主机上手动解压编译再安装,,其中的配置也是特别的繁琐,而且如果用户选择自己手动安装的话,是不能够在 root 用户下进行操作的,Elasticsearch 默认不允许 root 用户操作安装。所以这样的安装方式是特别难于管理的。

采用 Docker 部署的方式安装 Elasticsearch

随着 Docker 这种容器化管理的观念不断推行,这种部署方式逐渐被人们接收,其中很大一部分原因就是 Docker 的容器化管理实在是太爽了!!

接下来就跟大家说一下在 Docker 中到底应该怎样部署 Elasticsearch 服务。

在这里可以查看 Elasticsearch 具体有哪些 Tag,我们可以选择自己想要的版本 pull 下来

  • 拉取镜像:我选择 Tag 为 6.8.6 的版本,我们进入宿主机,直接输入
docker pull elasticsearch:6.8.6

然后 docker 就会去仓库拉取版本号为 6.8.6 的 Elasticsearch 镜像

等到下载完成的时候,我们在宿主机中输入

docker images

就可以看到宿主机中已经拉取到的镜像

  • 运行镜像创建容器:

运行如下的命令:

docker run --name myelasticsearch -d -e --net host -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:6.8.6
--name指的是我们所创建的容器的名称
-d标识后台运行
--net host 指的是我们为这个容器指定的网络组为host
-p标识我们要做的端口映射 前面是宿主机端口,后面是容器端口
最后就是指定我们要为哪一个镜像创建容器

执行之后,我们输入

docker ps

发现没有我们创建的容器

打开日志查看详情:

docker logs myelasticsearch

提示我们内存权限不足

这时候我们回来重新创建容器,在创建容器之前,先将刚刚创建的容器删除

docker rm myelasticsearch

然后执行

docker run --name myelasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --net host -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:6.8.6

这时候我们再看容器发现已经创建成功了,Docker 中 Elasticsearch 镜像默认是允许所有 IP 资源访问的,我们只需要把宿主机 9200 端口还有 9300 端口放开即可。

在宿主机中输入 IP:9200 如果出现以下内容,说明我们的 Elasticsearch 就部署成功了!

Docker 部署 Kibana

接下来,我们在宿主机中的 Docker 上再部署一个 Kibana 来管理 Elasticsearch

在 DockerHub 中搜索 Kibana

这里我们需要将 Kibana 的版本和 Elasticsearch 的版本统一才能管理

强调一下:版本一定要统一!版本一定要统一!版本一定要统一!

执行

docker pull kibana:6.8.6

拉取 Kibana 镜像

完成之后执行:

docker run --name kibana -e ELASTICSEARCH_URL=http://172.17.129.168:9200 -p 5601:5601 -d kibana:6.8.6

记住这里的 IP 地址只能填写宿主机的内网 IP,不能够填写 localhost 或者 127.0.0.1,这样会报错的

运行成功之后使用

docker ps 

查看正在运行的容器

可以看到 Kibana 还有 Elasticsearch 都是正在运行的状态,可以看到 Kibana 正在监听 5601 端口,我们需要放开宿主机的 5601 端口才行。

打开浏览器输入 IP:5601,出现以下内容的话说明我们的 Kibana 部署成功!

安装 IK 分词器插件

安装分词器我们需要在创建的 Elasticsearch 容器内部进行,首先,进入到我们创建的容器

docker exec -it elasticsearch /bin/bash

然后在 https://github.com/medcl/elasticsearch-analysis-ik 中查看插件版本对应的 Elasticsearch 版本

由于我们的 Elasticsearch 是 6.8.6 版本的,所以只要是 6.x 版本的 IK 插件都是可以的

接下来开始下载并安装插件

我们采用以下这种安装方式来为 Elasticsearch 安装 IK 插件

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.4/elasticsearch-analysis-ik-6.5.4.zip

这个下载过程比较漫长(真的是巨长无比啊!!!!!!)

下载完成之后会自动挂载安装的啦,我们需要重启一次 Elasticsearch 容器才行。具体效果就不演示了(我还没下完 😰 )。


插件安装-更新

由于上次下载安装过程实在是太慢了,好几次终端都直接和宿主机断开连接了,于是我决定采用手动下载插件包上传到容器中来安装。

下载插件包

进入 IK 分词器的主页,找到 6.8.6 版本 https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.8.6

直接点击就可以下载,推荐大家用迅雷下载,浏览器内置下载引擎貌似还是很慢。

拷贝压缩包到容器

下载完成之后我们先把文件上传到宿主机中去,把压缩包先拷贝到容器中去。

这是我宿主机中插件包的位置

docker cp /usr/local/elasticsearch-analysis-ik-6.8.6.zip elasticsearch:/usr/share/elasticsearch/plugins

然后进入我们之前创建的 Elasticsearch 容器

docker exec -it elasticsearch /bin/bash

解压插件包

在解压之前我们先创建一个文件夹,然后把压缩包移动到里面起

mkdir /usr/share/elasticsearch/plugins/ik
mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-6.8.6.zip /usr/share/elasticsearch/plugins/ik
unzip elasticsearch-analysis-ik-6.8.6.zip

删除压缩包

解压完成之后我们删除原来的压缩包

最后退出容器,重启容器就可以用插件啦!我们来测试一下

本文到这里就正式结束啦,感谢各位观看!❤️

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 209 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    493 引用 • 918 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • yp

    如果业务固定的话 更推荐基于 es 的镜像制作一个带插件的 es 镜像

    1 回复
  • Gouzhong1223
    作者

    因为我对这块不是很了解,您说的这种方式我还没有尝试过,有时间去试试,谢谢大佬指点啊 😋