使用Docker安装ElasticSearch
介绍
基于docker安装Elasticsearch搜索引擎+Head+Kibana+ik分词器
# 介绍
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。 Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。 Elasticsearch是基于Lucence的一款分布式实时搜索引擎。 Elasticsearch 通俗来说,就是一个搜索引擎,比如大家都用的百度搜索。
# 环境
最少要求2核2G
本篇安装环境为Ubuntu20.04 LTS
提示:安装的版本需要对应elasticsearch,不然无法使用
# docker拉取镜像
# 拉取 ElasticSearch镜像
docker pull elasticsearch:7.6.1
# 拉取 Head 镜像
docker pull mobz/elasticsearch-head:5
# 拉取 Kibana 镜像
docker pull kibana:7.6.1
2
3
4
5
6
# 启动容器
# 启动es容器
# -e "discovery.type=single-node" 单节点集群
# -e ES_JAVA_OPTS="-Xms512m -Xmx512m" 制定运行参数,不然如果机器内存太小,启动后会非常卡顿
# --name 起个别名
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d elasticsearch:7.6.1
2
3
4
# 启动head容器(es 客户端 )
docker run -d -p 9100:9100 --name es_head docker.io/mobz/elasticsearch-head:5
启动成功后,浏览器访问 http://ip:9100 注意:需要放开防火墙和安全组
如果有跨域,或者其他问题,修改一下文件
# 进入容器
docker exec -it elasticsearch /bin/bash
# 进入config目录
cd ./config
# 编辑 elasticsearch.yml 文件
vi elasticsearch.yml
2
3
4
5
6
在elasticsearch.yml中末尾添加以下内容
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
2
3
4
5
重启elasticsearch容器
docker restart elasticsearch
# 启动 Kibana
Kibana 是一个开发工具,相同的还有postman、apipost等
docker run -d -p 5601:5601 --name kibana --link elasticsearch:elasticsearch kibana:7.6.1
浏览器访问 http://ip:5601/Kibana 默认是英文的, kibana 7.X已经为我们准备好了汉化选项 。
# 进入容器
docker exec -it kibana /bin/bash
# 进入config目录
cd config
# 编辑 kibana.yml 文件
vi kibana.yml
2
3
4
5
6
在 kibana.yml末尾追加
i18n.locale: "zh-CN"
重启kibana容器
docker restart kibana
浏览器访问 http://ip:5601/ ,看到如下界面
# head报错修改
通过 Kibana 插入数据后,在head的数据预览页面发现数据没有加载出来,打开检查,发现前端报错406。
解决方案:
# 进入head容器中
docker exec -it es_head /bin/bash
cd _site
# 先安装vim
apt-get update
apt-get install vim
vim vendor.js
#输入 :6886 #代表,跳转到6886行
#将contentType: "application/x-www-form-urlencoded" 修改为contentType:"application/json;charset=UTF-8"
#输入 :7573 #代表,跳转到7573行
#将var inspectData = s.contentType === "application/x-www-form-urlencoded" && 修改为 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
2
3
4
5
6
7
8
9
10
11
保存退出,不需要重启容器
# 安装ik分词插件
百度网盘链接:https://pan.baidu.com/s/1gAQfwBsPDB2FeSMKPn4HNQ?pwd=7a9m 提取码:7a9m
上传到你的服务器,cp到elasticsearch容器即可。
docker cp elasticsearch-analysis-ik-7.6.1.zip elasticsearch:/usr/share/elasticsearch/plugins
# 进入容器内部
docker exec -it elasticsearch /bin/bash
# 创建ik目录,移动
mkdir /usr/share/elasticsearch/plugins/ik
mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.6.1.zip /usr/share/elasticsearch/plugins/ik
cd /usr/share/elasticsearch/plugins/ik
# 解压
unzip elasticsearch-analysis-ik-7.6.1.zip
# ok了,退出,重启
exit
docker restart elasticsearch
2
3
4
5
6
7
8
9
10
11
# 课程
b站狂神,讲解es视频https://www.bilibili.com/video/BV17a4y1x7zq/ (opens new window)
关于我为什么学es呢,哈哈,期末考试,学习通,为了不挂科,可以参考另一篇博客,学习通自动搜索题考试。