ElasticSearch、kibana和IK分词器docker安装
一、docker方式安装
安装低版本的 es,因为新版涉及安全验证等,很麻烦,主要原因是新版对应的IK分词器还没有发布呢。。。。
关于docker安装可以查看文章docker安装并配置外网代理
1. 创建网络
[root@glnode08 ~]# docker network create es-net 287b738b43d3eb35787b0d1a531ea375caed28736ecbd66b17c655f07281f214
2. 下载
下载的版本为 7.12.1,因为 ES8 以上的版本中包含默认的安全配置,使用docker安装的话,修改此部分配置格外麻烦,并且我尝试了安装 8.12.0 的版本,如果docker运行时你的 ES 取消了安全配置,可是在使用 kibana 时,依然会有安全配置问题(具体为登录5601端口是依然需要你提供token,可是我的es已经取消了安全认证,无法使用命令生成token),使用传统方式安装则只需要取消 ES 的安全认证,kibana 就可以直接使用。
[root@glnode08 ~]# docker pull kibana:7.12.1 [root@glnode08 ~]# docker pull elasticsearch:7.12.1
3. 运行
先创建对应的挂载目录
#1、创建Elasticsearch配置文件夹 mkdir -p /home/elasticsearch/config #2、创建Elasticsearch数据文件夹 mkdir -p /home/elasticsearch/es-data #3、创建Elasticsearch插件文件夹(如:ik) mkdir -p /home/elasticsearch/es-plugins #说明:目的将CentOS本地的文件夹映射到Elasticsearch容器,以实现容器数据的持久化到CentOS本地,以及通过CentOS本地文件夹内容的修改同步到容器 #创建并写入elasticsearch.yml配置,注意:http.host: 0.0.0.0 冒号后有一空格 echo "http.host: 0.0.0.0">>/home/elasticsearch/config/elasticsearch.yml
修改权限一定要修改权限,不然后面会有问题
chmod -R 777 /usr/local/data-docker/elasticsearch/
es 运行命令
docker run -d --name es -e "discovery.type=single-node" -v /home/elasticsearch/es-data:/usr/share/elasticsearch/data -v /home/elasticsearch/es-plugins:/usr/share/elasticsearch/plugins -v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --privileged --network es-net -p 9200:9200 -p 9300:9300 elasticsearch:7.12.1
kibana 运行命令
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://es:9200 --network=es-net -p 5601:5601 kibana:7.12.1
可以访问对应的地址测试
4. 安装 IK 分词器
IK 分词器下载链接,用于支持智能化的中文分词,一定要找到和你的 es 版本完全相同的版本号。离线下载下来,放入你的对应的插件挂在目录即可
4.1 查看对应数据卷
[root@glnode08 es-plugins]# docker inspect -f '{{ .Mounts }}' es [{bind /home/elasticsearch/es-data /usr/share/elasticsearch/data true rprivate} {bind /home/elasticsearch/es-plugins /usr/share/elasticsearch/plugins true rprivate}]
4.2 解压并上传到挂载目录
可以看到我们对应的本地挂在目录,在/home/elasticsearch/es-plugins/目录下创建ik目录,并且把解压的文件全部放进去,然后重启容器
效果如下
4.3 重启容器
docker restart es
4.4 测试分词器
POST /_analyze { "text": "亚索学习java太棒了", "analyzer": "standard" } POST /_analyze { "text": "亚索学习java太棒了", "analyzer": "ik_smart" }
可以正确分词了!