Docker部署ES

本篇主要是记录使用Docker部署ES单点模式服务
为了方便测试,同时部署可视化工具Kibana,如不需要可以忽略Kibana相关操作。

一、准备工作

1.创建本地系统目录,后边用来做文件目录映射

mkdir -p ~/data/es/data ~/data/es/plugins

2.开放端口,方便后续做端口映射
tips: 如果是云服务,比如ECS,记得同步在安全组配置开放端口
ES需要开放两个端口:9200和9300
9200 是暴露的HTTP协议端口,用来供用户访问的
9300 是用于集群部署的,ES各个节点互联时需要用到的端口,单点模式不配置也可以,这里开放是为了后续扩展集群节点

// 开放端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
// 顺便开放一下kibana的端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
// 重载配置
firewall-cmd --reload
// 查看已开放的端口,用来确认是否设置成功
firewall-cmd --zone=public --list-ports

3.创建一个docker网络节点,用于es与kibana容器互联

// 创建一个名为 esnet 的网络节点
docker network create esnet

二、下载、创建并运行容器

1.使用docker pull 命令拉取镜像,es和kibana需要版本兼容,此处都使用7.12.1版本。
tips:以后不建议偷懒直接拉取latest版本~
血泪屎(可忽略):个人做测试的时候,先pull的es:7.12.1,然后偷懒直接docker pull kibana拉取latest版本。启动ES后,再启动kibana,死活连不上。logs一下,说没有发现存活的实例。后来在kibana管理端发现提示,说版本不兼容,需要使用es:5.x版本;用docker images 看了下镜像,发现latest版的created居然不是最新的,我下载的es:7.12.1镜像的created是3年前,但是kibana:latest版本居然是好几年前的,好嘞谢特!
所以,不建议直接使用docker pull 镜像名直接拉取latest版本,有可能拉倒陈年老货,导致其它组件版本不兼容无法使用。

docker pull elasticsearch:7.12.1
// 获取kibana镜像,不需要的可以省略
docker pull kibana:7.12.1

2.创建并启动es容器

docker run \
-d \
-p 9200:9200 \
-p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v ~/data/es/data/:/usr/share/elasticsearch/data \
-v ~/data/es/plugins/:/usr/share/elasticsearch/plugins \
--privileged \
--restart=unless-stopped \
--network=esnet \
--name es \
elasticsearch:7.12.1

命令解释:

docker run -d >以后台运行方式创建并启动容器
-p > 开放端口,9200端口是暴露的HTTP协议端口,用来供用户访问,9300是便于后边做集群扩展的,用于集群部署中,ES各个节点互联时所用的端口,单点模式不配置也阔以
-v > 设置挂载目录

-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"  >xms设置JVM启动时分配内存大小,xmx设置运行时容器占用最大内存。ES容器的这两个值,不推荐设置低于512的值,否则可能会出现内存不足的问题

-e "discovery.type=single-node"      >字面意思,设置单例模式启动

--privileged > 授权挂载卷访问权限。通常不建议在生产环境中使用 --privileged 模式,因为它授予容器几乎所有的 Linux 能力,可能会带来安全风险。除非你确实需要某些特殊权限(如访问特定硬件资源),否则应尽量避免使用此选项。

--restart=unless-stopped   >用来设置容器重启时机,unless-stopped:表示,如果容器由于任何原因停止运行(如崩溃或手动停止),Docker 会自动重新启动该容器。
                            除非容器是通过 docker stop 或者其他明确的停止命令被用户主动停止的,在这种情况下,即使 Docker 守护进程重启,也不会自动重启这个容器。

--network=esnet > 设置容器网络加入到esnet网络中,就是上文创建的docker网络节点

启动完成,在浏览器中通过IP:9200可以访问到容器信息,即可

3.部署kibana(不需要可视化测试工具的,这一步可以忽略了)
创建并运行kibana容器

docker run \
-d \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--restart=unless-stopped \
--network=esnet \
--name kibana \
kibana:7.12.1

命令解释:

--network=esnet  > 将kibana也加入到esnet网络中

-e ELASTICSEARCH_HOSTS=http://es:9200 
> 设置kibana连接到ES的地址,因为kibana也加入到了esnet中,所以此处可以直接使用es容器的名称代替IP,写成es:9200

三、安装IK中文分词器

背景:ES默认的分词器,对中文分词并不是很友好,基本上会是逐字拆分的。
IK分词器官网:https://github.com/infinilabs/analysis-ik
安装IK分词器,参考资料:https://blog.csdn.net/qq_73639699/article/details/139347283

懒得看的话,就按下边的傻瓜式安装吧。
基本上安装方式分为两种:离线下载安装 和 在线安装【Emmm....没毛病-_-||】

官方有提示:推荐使用与ES相同版本号的IK分词器,下边有说明,先说下两种安装方式

1.离线下载安装【适用于大多数情况,但是操作麻烦】
1.1.安装包可以在这里下载:https://release.infinilabs.com/analysis-ik/stable/
我们上边用的7.12.1版本ES,所以需要下载的IK也是7.12.1版本的


1.2.在本地解压到指定目录,然后整包上传到ES容器plugins映射目录。
我们上边在创建ES容器的时候,已经指定了插件的映射目录,所以上传到 ~/data/es/plugins即可

-v ~/data/es/plugins/:/usr/share/elasticsearch/plugins \

本地新建ik目录,然后解压到ik目录



将ik目录整包上传到 ~/data/es/plugins
1.3. 最后重启 es 容器就完成了

2.在线安装>【对网络有要求,网络好,秒秒钟的事,而且是傻瓜式的,网络不好会很慢,而且太慢的话会报错终止安装】


如图,官方网站截的,最后一行提示语:替换成你自己的ES版本号。也就是推荐我们使用和ES一致版本的IK包,比如我们上边用的是7.12.1的ES,那么我们的IK分词器也应该下载7.12.1的版本
然后又因为我们这里是使用docker部署的,所以需要将它下载到容器的插件目录中,改造命令如下:

// 其实就是加个docker exec -it <容器名> 前缀,让命令在容器内执行就行了;下载IK分词器到容器的 /bin/elasticsearch-plugin目录
docker exec -it es \
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.12.1

注意:上边两行是 “一条命令” , \  是为了便于查看的换行符

// 重启容器
docker restart es

我这里网络OK,下载的还是比较快的,本身包也不大,基本上秒秒钟搞定。网络可以的话,这种方案还是很OK的,因为就是两个命令,其它基本不用动,很安逸撒,实操截图


最后在kibana测试一下子:



嗯,OK的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容