前言:网上有很多文章描述关于Docker安装ElasticSerach、ElasticSerachhead、IK分词器及Kibanna步骤、流程及注意事项。我试了很多,综合整理出此文,此文中有些地方是引用他人,但记不清楚具体是从哪看来的。如此文有部分内容属于引用,请原作者留言告知链接。非常感谢。
本文所涉及的宿主机是VM虚拟机上安装的CentOS7。所涉及安装运行的各个容器均为6.2.4版本。
1.镜像拉取
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.2.4
docker pull docker.elastic.co/kibana/kibana:6.2.4
docker pull mobz/elasticsearch-head:5
2.安装Docker
注意:宿主机一定要安装CentOS 7.x 以上的版本
yum -y install docker
验证Docker是否安装成功
docker -v
启动Docker
systemctl start docker
验证是否启动成功,查看Docker
docker info
镜像加速:
vim /etc/docker/daemon.json
在该文件中输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors."]
}
配置完成记得刷新配置
sudo systemctl daemon-reload
sudo systemctl restart docker
3.Docker安装运行elasticsearch及Kibanna
3.1查看镜像,找到要安装的镜像ID
docker images
注意:以上截图仅仅提示什么是镜像ID
3.2Docker安装运行elasticsearch
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -d -p 9200:9200 -p 9300:9300 -p 5601:5601 --name elasticsearch 7cb69da7148d
(1)-p 5601:5601 这里把Kibanna端口映射提前配置好,kibana的container共用elasticsearch的网络,所以这样设置
(2)7cb69da7148d 这里镜像ID根据自己实际镜像ID填写
(3)-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 这里配置好elasticsearch运行内存
(4)-e "discovery.type=single-node" 这里配置成单节点模式
(5)-d 指后台运行
(6)--name elasticsearch 指定该容器名称为 elasticsearch
3.3Docker安装运行Kibanna
docker run -it -d -e ELASTICSEARCH_URL=http://172.17.0.2:9200 --name kibana --network=container:elasticsearch 7cb69da7148d
(1)-e ELASTICSEARCH_URL=http://172.17.0.2:9200 这里配置elasticsearch容器内部暴露IP,该IP获取方法如下:
[root@localhost ~]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' 3d165e4da107(这里指elasticsearch容器的镜像ID)
(2)--name kibana 这里配置容器名字
(3)--network=container:elasticsearch 这里配置kibana 容器共用容器名为:elasticsearch的容器网络
3.4Docker安装运行IK分词器
注意:ik分词器必须使用:elasticsearch-analysis-ik-6.2.4.zip 版本
(1)安装unzip
yum install unzip
(2)安装lrzsz上传工具
yum install -y lrzsz
(3)linux命令行中输入rz,选择elasticsearch-analysis-ik-6.2.4.zip上传到/home 目录下
(4)解压elasticsearch-analysis-ik-6.2.4.zip
unzip elasticsearch-analysis-ik-6.2.4.zip
(5)在/root目录下新建如下目录
mkdir -pcp /root/elasticsearch/plugins
(6)移动解压elasticsearch-analysis-ik-6.2.4.zip后的elasticsearch目录到/root/elasticsearch/plugins目录下,并改名为ik
cp -r /home/elasticsearch /root/elasticsearch/plugins/ik
(7) 将 ik 文件夹复制到elasticsearch容器中的 plugins 文件夹中
docker cp /root/elasticsearch/plugins/ik elasticsearch:/usr/share/elasticsearch/plugins
(8) 进入容器查看,验证是否拷贝成功
docker exec -it elasticsearch /bin/bash
cd plugins
ls
(9)重启elasticsearch容器
docker restart elasticsearch
(10)使用 kibana 控制台验证是否配置成功
GET _analyze
{
"analyzer": "ik_smart",
"text": ["我爱我的祖国,并且我还深爱着你"]
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": ["我爱我的祖国,并且我还深爱着你"]
}
3.5Docker安装运行ElasticSerach head
docker run -d -p 9100:9100 --name esh b19a5c98e43b
(1)跨域拒绝访问问题解决方案:
进入elasticsearch容器内部,修改配置文件elasticsearch.yml
docker ps -a #拿到运行容器elasticsearch 的 id
docker exec -it ******(容器id) /bin/bash
cd ./config
vim elasticsearch.yml
在elasticsearch.yml中添加:
http.cors.enabled: true
http.cors.allow-origin: "*"
重启顺序:
docker restart elasticsearch
docker restart Kibanna
docker restart esh
(2)ElasticSearch-Head中查询不出数据的解决方法
在docker安装了elasticsearch-head:5和elasticsearch:6.2.4之后,打开界面连接es时发现数据无法展示
浏览器报错:
{
"error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
"status" : 406
}
解决步骤如下:
(1)因为ElasticSerach head的docker容器里面无法使用vi/vim,所以需要先将文件拷贝出来。以下“esh”为ElasticSerach head的容器名字。
[root@localhost ~]# cd /home [root@localhost home]# docker cp esh:/usr/src/app/_site/vendor.js ./ [root@localhost home]# vi vendor.js
(2)需要修改的地方共有两处:
1)6886行 contentType: "application/x-www-form-urlencoded 改成 contentType: "application/json;charset=UTF-8" 2)7573行 var inspectData = s.contentType === "application/x-www-form-urlencoded" && 改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
(3)补充说明:
vi中显示行号的命令为
:set nu
vi中跳转到指定行的命令为
:行号
(4)将改完后的文件拷贝回容器
docker cp vendor.js esh:/usr/src/app/_site
无需重启,Ctrl+F5强制刷新浏览器即可解决。
至此,Docker安装ElasticSerach、ElasticSerach head、IK分词器及Kibanna 安装运行完毕!