Day10.ElasticSearch在docker中安装

一、容器的创建与远程连接

  1. 下载镜像(此步省略)
docker pull elasticsearch:5.6.8
  1. 创建容器
docker run -di --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
  1. 浏览器输入地址:
    http://192.168.153.138:9200/ 即可看到如下信息
    图1

二、与docker中ES远程连接,9300不可用问题

  1. 运行测试程序,连接9300,发现会报如下错误
NoNodeAvailableException[None of the configured nodes are available: 
[{#transport#‐1}{exvgJLR‐RlCNMJy‐hzKtnA}{192.168.153.138}
{192.168.153.138:9300}] 
] 
  at 
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347) 
  at 
org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245) 
  at 
org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)

这是因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件

  1. 我们进入容器,修改文件(不是linux)
docker exec ‐it my_elasticsearch  /bin/bash #my_elasticsearch为容器名

此时,我们看到elasticsearch所在的目录为/usr/share/elasticsearch,此时已经在容器内部,进入config看到了配置文件elasticsearch.yml
我们通过vi命令编辑此文件,尴尬的是容器并没有vi命令 ,咋办?我们需要以文件挂载的
方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置
文件的修改

  1. 拷贝配置文件到宿主机
    首先退出容器exit,然后执行命令:
docker cp tensquare_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml 
/usr/share/elasticsearch.yml	#要保证es容器启动着,同时注意,这些指令是一行
  1. 停止和删除原来创建的容器
docker stop tensquare_elasticsearch  
docker rm  tensquare_elasticsearch
  1. 重新执行创建容器命令
docker run -di --name=tensquare_elasticsearch -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
#-v 是让前边挂载,运行时替换后边的文件
#注意,代码太长,需要谨慎
  1. 修改/usr/share/elasticsearch.yml
vi /usr/share/elasticsearch.yml

将 transport.host: 0.0.0.0 前的#去掉后保存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生产环境下指定具体的IP。

  1. 重启启动,发现问题!!!
docker restart tensquare_elasticsearch

重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为
elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存
区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以
我们还需要系统调优。

  1. 系统调优【linux最好就优先配置上】
    我们一共需要修改两处
    修改/etc/security/limits.conf ,追加内容,在end后也可以
vi /etc/security/limits.conf

* soft nofile 65536 	#扩充软件
* hard nofile 65536		#扩充硬件

nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容

vi /etc/sysctl.conf

vm.max_map_count=655360

限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数马上生效
不操作,也可以

sysctl ‐p
  1. 重新启动虚拟机,再次启动容器,发现已经可以启动并不再自动挂掉了,尝试远程访问

三、容器中,IK分词器安装

  1. 快捷键alt+p进入sftp , 将ik文件夹上传至宿主机
#就是将ik文件夹上传到/root下
sftp> put ‐r d:\setup\ik
  1. 在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下。
docker cp ik tensquare_elasticsearch:/usr/share/elasticsearch/plugins/
  1. 重新启动,即可加载IK分词器
docker restart tensquare_elasticsearch
  1. 可以在浏览器测试下
http://192.168.153.138:9200/_analyze?analyzer=ik_max_word&pretty=true&text=吉诺比利

图2

四、容器中,HEAD插件安装

  1. 修改/usr/share/elasticsearch.yml ,添加允许跨域配置
vi /usr/share/elasticsearch.yml

http.cors.enabled: true 
http.cors.allow‐origin: "*"
  1. 重新启动elasticseach容器
docker restart tensquare_elasticsearch
  1. 下载head镜像(此步省略)
docker pull mobz/elasticsearch‐head:5
  1. 创建head容器
docker run -di --name=tensquare_head -p 9100:9100 mobz/elasticsearch-head:5
  1. 去网页测试下
    图3

猜你喜欢

转载自blog.csdn.net/weixin_42838993/article/details/84968587