工具包下载链接://download.csdn.net/download/qq_41902908/11967619
(1)下载镜像(此步省略)
docker pull elasticsearch:5.6.8
(2)创建容器
docker run -di --name=ktc_elasticsearch -p 9200:9200 -p 9300:9300
elasticsearch:5.6.8
(3)浏览器输入地址:
http://192.168.222.128:9200/ 即可看到如下信息
(4)我们修改 demo 的 application.yml
server:
port: 9007
spring:
application:
name: ktc-search #微服名称
data:
elasticsearch:
cluster-nodes: 192.168.222.128:9300
(5)运行测试程序,发现会报如下错误
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes
are available: [{#transport#-1}{Lybo2Ij5Q7WuakGld-6gHA}{192.168.222.128}
{192.168.222.128:9300}]
at
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(Tran
sportClientNodesService.java:347) ~[elasticsearch-5.6.8.jar:5.6.8]
at
org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodes
Service.java:245) ~[elasticsearch-5.6.8.jar:5.6.8]
这是因为 elasticsearch 从 5 版本以后默认不开启远程连接,需要修改配置文件
(6)我们进入容器
docker exec -it ktc_elasticsearch /bin/bash
此时,我们看到 elasticsearch 所在的目录为/usr/share/elasticsearch ,进入confifig 看到了配置文件
elasticsearch.yml我们通过 vi 命令编辑此文件,尴尬的是容器并没有 vi 命令,咋办?我们需要以文件挂载的方式创
建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置文件的修改
http.host: 0.0.0.0
# Uncomment the following lines for a production cluster deployment
#transport.host: 0.0.0.0
#discovery.zen.minimum_master_nodes: 1
(7)拷贝配置文件到宿主机
首先退出容器,然后执行命令:
docker cp ktc_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /root
(8)停止和删除原来创建的容器
docker stop ktc_elasticsearch
docker rm ktc_elasticsearch
(9)重新执行创建容器命令
docker run -id --name=ktc_elasticsearch -p 9200:9200 -p 9300:9300 -v
/root/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
elasticsearch:5.6.8
(10)修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0前的#去掉后保存文件退出。其作用是允许任何
ip 地址访问 elasticsearch.开发测试阶段可以这么做,生产环境下指定具体的 IP
(11)重启启动
docker restart ktc_elasticsearch
重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进
行一些检查,比如最多打开的文件的个数以及虚拟内存区域数量等等,如果你放开了此配置,意味着需要打开更多的
文件以及虚拟内存,所以我们还需要系统调优。
(12)系统调优
我们一共需要修改两处修改/etc/security/limits.conf ,追加内容
* soft nofile 65536
* hard nofile 65536
nofifile 是单个进程允许打开的最大文件个数 soft nofifile 是软限制 hard nofifile是硬限制修改
/etc/sysctl.conf,追加内容
vm.max_map_count=655360
(13)重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问
(1) 将 ik 文件夹上传至宿主机
(2)在宿主机中将 ik 文件夹拷贝到容器内 /usr/share/elasticsearch/plugins目录下。
docker cp ik ktc_elasticsearch:/usr/share/elasticsearch/plugins/
(3)重新启动,即可加载 IK 分词器
docker restart ktc_elasticsearch
(1)修改/usr/share/elasticsearch.yml ,添加允许跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
(2)重新启动 elasticseach 容器
(3)下载 head 镜像(此步省略)
docker pull mobz/elasticsearch-head:5
(4)创建 head 容器
docker run -id --name=ktc_head -p 9100:9100 mobz/elasticsearch-head:5
(1)拉取logstash镜像
docker pull logstash:5.6.8
(2)上传mysqletc整个文件夹进linux
(3)修改mysql.conf 的elasticserach的地址和mysql地址
(4)基于原来的镜像编写dockerfifile
from logstash:5.6.8
run mkdir /usr/local/logstash
cmd ["-f","/usr/local/logstash/mysql.conf"]
(5)基于logstash构建新镜像
docker build -t='logstash_new' .
(6)创建容器并挂载目录,因为此时容器中并没有mysql.conf,需要挂载外部目录而创建
docker run -id --name=ktc_logstash -v /root/mysqletc:/usr/local/logstash logstash_new
(7)修改mysql.conf中mysqljar包的位置
jdbc_driver_library => "/usr/local/logstash/mysql-connector-java-5.1.46.jar"
docker logs -f --tail=30 ktc_logstash :查看logstash日志最后30行,并且实时更新