docker下安装elasticsearch

  • 安装elasticsearch
  • 下载镜像
  • 检查是否安装好
  • 看下虚拟机还有多少内存,内存够用就行
  • 创建配置文件目录,用于与docker中的配置文件挂载
  • 启动
  • 安装ik分词器
  • 自定义扩展词库
  • Docker安装nginx
  • Docker安装Kibana
  • 设置开机自启动


安装elasticsearch

下载镜像

docker pull elasticsearch:7.4.2      //安装elasticsearch 
docker pull kibana:7.4.2       //安装kibana

检查是否安装好

docker images

看下虚拟机还有多少内存,内存够用就行

free -m  //available:老师的是389,我的是593都够用

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_nginx

创建配置文件目录,用于与docker中的配置文件挂载

mkdir -p /mydata/elasticsearch/config     //用于创建外部挂载配置文件
mkdir -p /mydata/elasticsearch/data       //用于创建外部挂载配置文件
echo "http.host: 0.0.0.0" >>  /mydata/elasticsearch/config/elasticsearch.yml    //设置所有机器都可访问本机elasticsearch

启动

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

上述命令作用说明:

在虚拟机创建了 elasticsearch 的两个 docker 外部 挂载用文件夹
 mkdir -p /mydata/elasticsearch/config
 mkdir -p /mydata/elasticsearch/data写入了一个配置并创建了yml配置文件, 代表可以被远程的任意 机器访问
 echo “http.host:0.0.0.0” >> /mydata/elasticsearch/config/elasticsearch.yml为容器起了一个名字elasticsearch 暴露两个端口 9200端口 向elasticsearch的restApi发送http请求的端口 9300是es在分布式集群状态下 节点之间的通讯端口
 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \以单节点模式运行
 -e “discovery.type=single-node” \指定内存占用
 -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \目录的挂载
 -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
 -v /mydata/elasticsearch/data:usr/share/elasticsearch/data 
 -v /mydata/elasticsearch/plugins:usr/share/elasticsearch/plugins \指定刚下载的镜像
 -d elasticsearch:7.4.2

我这里的直接启动成功了,但是一会再看一次没有了!
处理错误:

  1. 如果启动失败,查看日志docker logs elasticsearch,显示java.nio.file.AccessDeniedException:拒绝访问
  2. 到elasticsearch下查看data目录权限 ll

    把所有组的文件权限都改成rws:**chmod -R 777 /mydata/elasticsearch/ **
  1. 重新启动elasticsearch: docker start S4C
    “S4C”为docker中elasticsearch的进程号前三位,通过 docker ps -a查看
    访问 XXXX:9200 端口,出现json字符串表示访问成功!

安装ik分词器

  • https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v7.6.2 找到与自己es版本相同的ik下载到本地,并解压到新建的ik文件夹(我的是7.4.2)

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_02

使用xftp,将ik文件夹放到es的plugins目录(安装完成…)

到镜像中测试

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_03

出现ik,表示安装上了。在postman中测试

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_nginx_04

自定义扩展词库

修改分词器配置文件,指定一个远程词库,让ik分词器远程发送请求得到最新单词:

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_05

远程项目如何实现:

  1. 写一个项目,处理请求返回新单词,让ik分词器给项目发送请求
  2. 把最新词库放到nginx中,让ik给nginx发送请求

这里使用2的方式,所以先安装nginx
修改内存:
使用free -m看一下内存,如果内存太小,关闭虚拟机增加一下

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_elasticsearch_06

把虚拟机内存改为3g,把es最大内存改为512

//停止容器

 docker stop elasticsearch

 //删除容器

 docker rm elasticsearch

 //创建容器

 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 

 -e “discovery.type=single-node” 

 -e ES_JAVA_OPTS="-Xms64m -Xmx512m" 

 -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 

 -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data 

 -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins 

 -d elasticsearch:7.4.2

Docker安装nginx

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_07

docker run -p 80:80 --name nginx -d nginx:1.10
 mkdir nginx //mydata文件夹下
 docker container cp bac97:/etc/nginx . //使用nginx容器长iD,使用容器名报错
 docker stop bac97
 docker rm bac97
 mv nginx conf
 mkdir nginx
 mv conf nginx/
 //每一行后面都有一个 \ 用于linux识别换行
 docker run -p 80:80 --name nginx 
 -v /mydata/nginx/html:/usr/share/nginx/html 
 -v /mydata/nginx/logs:/var/log/nginx 
 -v /mydata/nginx/conf:/etc/nginx 
 -d nginx:1.10

图示:

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_nginx_08

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_09

访问80端口 出现404,因为nginx/html文件夹下没有文件,随便编写一个index.html,访问80可以显示出来,说明nginx配置完成(nginx寻找资源默认都是在html文件夹下找)

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_elasticsearch_10


修改ik分词器远程词库地址:

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_11

修改完成之后,重启es

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_12

如果想增加什么分词,就在fenci.txt进行新增,重启es就能自动识别:

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_docker_13

测试不通过,之后改成使用es中配置分词词库,没有用到nginx(这种方式在es集群环境下并不适用)

docker进程设置开机启动且配置先后顺序 docker怎么设置开机自启_elasticsearch_14

Docker安装Kibana

可视化界面,可视化检索数据

测试数据方法:

  1. 直接用postman,但是略繁琐
  2. 用kibana,方便,但是体积略大

上一节已经安装kibana了,启动:

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.0.143:9200 -p 5601:5601 \
-d kibana:7.4.2

注意把ip换成自己的

访问192.168.0.143:5601

  • 因为我安装出问题了,所以使用的谷歌插件 elasticsearch-head,这个很轻便,kibana1.1G!

修改:

使用elasticsearch-head发送请求会出现406问题,这是因为缺少请求体导致发送数据不安全,需要修改两个地方:
F:\JavaDevelop\plug\elasticsearch-head\elasticsearch-head 下 vendor.js

  1. 第一处在6888行:把内容 ‘application/x-www-form-urlencoded’ 改成 ‘application/json;charset=UTF-8’
  2. 第二处在7574行:把内容 ‘application/x-www-form-urlencoded’ 改成 ‘application/json;charset=UTF-8’

修改完成后刷新界面,否则无法进行crud

kibana是大数据专用的软件哦~

设置开机自启动

docker update elasticsearch --restart=always
docker update kibana --restart=always

注:

  • 访问192.168.0.143:5601可能会出现没有准备好的标识,查看docker logs kibana,如果没有出现error,那么等待一会再访问就访问到了!
    - 如果kibana写错ip,就废了,我之前那个虚拟机就是,咋弄都改不了,一直报错!!!解决办法欢迎各位同行指点迷津~