1、拉取es官方镜像:
docker pull elasticsearch:7.10.1
2、创建用户自定义网络:
docker network create esnetwork
3、运行es容器
docker run --name elasticsearch --net esnetwork -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -d elasticsearch:7.10.1
参数详解:
-p:表示端口映射,冒号左边是宿主机端口,右边是容器端口,端口映射后访问宿主机这个端口就相当于访问容器的这个端口。
-v:表示文件/目录共享,也叫数据卷。冒号左边是主机的目录,右边是容器目录,通过这种共享在容器启动后容器内的目录下的内容都会共享到宿主机的目录下,这样我们后续修改配置文件直接在主机目录下修改就行了,修改完成会同步到容器中,就不需要再进入容器了。
–name:表示为容器起个名字,在容器比较多的时候方便区分
--net 设置es的自定义网络
-e 设置启动参数
启动后通过docker ps 查看容器是否启动成功
启动成功后浏览器使用ip+9200即可访问
如果启动失败的需要使用doker logs -f elasticsearch 查看es启动失败的日志,以下是可能启动失败的原因:
1、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:
vi /etc/sysctl.conf
sysctl -p
修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
以上错误是由于es不支持默认的配置,解决方法
在启动容器名中添加启动参数 -e "discovery.type=single-node"(上面的启动命令中已添加了,直接使用即可)
docker pull docker.elastic.co/kibana/kibana:7.10.1
docker run --name kibana --net esnetwork -e ELASTICSEARCH_URL=http://172.18.0.2:9200 -p 5601:5601 -d kibana:7.10.1
注意ELASTICSEARCH_URL一定要使用docker内部的容器IP
启动成功后浏览器访问 ip+5601即可访问
docker pull logstash:7.10.1
/usr/logstash/pipeline/logstash.conf
在logstash.conf中加入如下配置
input {
tcp {
mode => "server" host => "0.0.0.0"
port => 5044 codec => json_lines
}
}
output {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "%{[spring.application.name]}-%{+YYYY.MM.dd}"
}
}
/usr/logstash/config/logstash.yml
在logstash.yml中加入如下配置
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
ip地址根据自己的es来实际修改,端口9200不变
docker run -d --name logstash -m 1000M --net esnetwork --restart=always -p 5044:5044 -p 9600:9600 --privileged=true -v /usr/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /usr/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.10.1
启动前需要先启动es,否则logstash会连不上
启动可能会出现docker内存不足的问题,需要重写docker的运行内存,错误信息如下
/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --default-ulimit nofile=65536:65536 -H fd:// --containerd=/run/containerd/containerd.sock
sudo systemctl daemon-reload
sudo systemctl restart docker
以上就是本次docker安装elk的全过程,基本上使用上面的命令安装完后都能成功运行,如有不足的地方欢迎各位大佬补充~~