一、安装 Elasticsearch
尝试直接拉取 Elasticsearch 镜像:
执行 docker pull docker.elastic.co/elasticsearch/elasticsearch,拉取失败,错误提示为 “Error response from daemon: manifest for docker.elastic.co/elasticsearch/elasticsearch:latest not found: manifest unknown: manifest unknown”。
然后输入具体版本号进行拉取,如 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.14.3,这次成功拉取了镜像。
运行 Elasticsearch:
首先创建一个网络,因为后面还有其他组件会用到,便于让这些容器之间通信。执行命令 docker network create es-net。
接着运行 Elasticsearch 容器,命令如下:
plaintext
Copy
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms1024M -Xmx1024m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
docker.elastic.co/elasticsearch/elasticsearch:8.14.3 #也可以是镜像 ID
这里设置的内存为 1G,如果不设置,在资源有限的虚拟机(如 2 核 2G 内存加上 2G 虚拟内存,或者重新分配为 4 核 4G 内存和 4G 虚拟内存)上可能会直接卡爆。刚开始运行时,CPU 会占用较大,运行一会儿就会降下来。
设置密码:
访问 https://IP:9200,注意是 https,这个版本不能通过 http 访问。此时会提示输入用户名密码,但密码在哪里呢?可以先自己设置密码。
进入 Elasticsearch 容器,执行 docker exec -it es bash,当前目录为 /usr/share/elasticsearch/。
执行 ./bin/elasticsearch-setup-passwords interactive,会出现提示 “Initiating the setup of passwords for reserved users elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user. You will be prompted to enter passwords as the process progresses. Please confirm that you would like to continue [y/N]”。建议设置相同的密码,方便记忆。按 Y 后,输入多遍相同的密码。
然后重启容器,docker restart es。再次输入 https://IP:9200,输入 “elastic” 和刚才设置的密码就可以了。
另一种重设密码的方法:
进入 es 容器,执行 elasticsearch-reset-password -u elastic,按 Y 回车会在 SSH 界面中输出一串密码。
设置 kibana 密码,执行 elasticsearch-reset-password -u kibana_system。
新建用户,执行 elasticsearch-users useradd logadmin,然后输入密码。
设置角色,执行 elasticsearch-users roles -a superuser logadmin 和 elasticsearch-users roles -a kibana_system logadmin。
移除授权,执行 elasticsearch-users roles -r kibana_admin logadmin。
查看授权,执行 elasticsearch-users roles -v logadmin。
二、安装 Kibana
拉取 Kibana 镜像:
docker pull docker.elastic.co/kibana/kibana:8.14.3。
运行 Kibana:
执行命令 docker run -d --name kibana -p 5601:5601 --network es-net docker.elastic.co/kibana/kibana:8.14.3。
配置 Kibana:
先进入 Elasticsearch 容器,修改 elasticsearch.yml,可以修改以下内容:
plaintext
Copy
xpack.security.http.ssl:
enabled:
也可以把 xpack.security.enabled: true改为false,这样 Kibana 就不需要配置密码了。然后重启 Elasticsearch 容器。
进入 Kibana 容器,修改 kibana.yml,增加以下内容:
plaintext
Copy
i18n.locale: zh-CN
elasticsearch.username: logadmin
elasticsearch.password: 123456
elasticsearch.hosts: [ "http://es:9200" ] #容器名,这一句不改可能启动不了 Kibana,有的不改也能启动 Kibana 然后在网页初始界面配置地址,还有的改为容器网关 ip 172.18.0.1...
修改后重启 Kibana 容器,就可以用 “logadmin” 登录了。如果把 “logadmin” 改为 “kibana_system” 也能进入登录界面,但用这个账户登录可能会提示没有权限,而用 “elastic” 账户登录可以进入。
三、安装 Logstash
拉取 Logstash 镜像:
docker pull docker.elastic.co/logstash/logstash:8.14.3。
运行 Logstash:
先创建一个临时的 Logstash 容器,执行命令:
plaintext
Copy
docker run -d --name logstash --network es-net \
-e ES_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" \
--privileged=true \
-p 5044:5044 \
-p 9600:9600 \
docker.elastic.co/logstash/logstash:8.14.3
复制文件,执行以下命令:
plaintext
Copy
docker cp -a logstash:/usr/share/logstash/config /root/elk/logstash-config
docker cp -a logstash:/usr/share/logstash/pipeline /root/elk/logstash-pipeline
删除临时容器,docker rm logstash -f。
重新创建容器,执行命令:
docker run -d --name logstash --network es-net \
-v /root/elk/logstash-config:/usr/share/logstash/config \
-v /root/elk/logstash-pipeline:/usr/share/logstash/pipeline \
-e ES_JAVA_OPTS="-Duser.timezone=Asia/Shanghai" \
--privileged=true \
-p 5044:5044 \
-p 9600:9600 \
docker.elastic.co/logstash/logstash:8.14.3
但可能会出现启动后能访问 http://ip:9600,却不能访问 http://ip:5044的情况。
另外,如果直接映射目录创建 Elasticsearch 容器,可能会导致无法启动容器。可以先临时创建一个没有映射目录的容器,然后用docker cp把几个目录复制出来,再删除这个容器,最后就能用映射的目录创建容器了。具体命令如下:
plaintext
Copy
docker run -d \
--name es \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1024M -Xmx1024m" \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
docker.elastic.co/elasticsearch/elasticsearch:8.14.3
docker cp -a es:/usr/share/elasticsearch/data /root/elk/es-data
docker cp -a es:/usr/share/elasticsearch/config /root/elk/es-config
docker cp -a es:/usr/share/elasticsearch/logs /root/elk/es-logs
docker cp -a es:/usr/share/elasticsearch/plugins /root/elk/es-plugins
docker rm es -f
docker run -d \
--name es \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1024M -Xmx1024m" \
-v /root/elk/es-data:/usr/share/elasticsearch/data \
-v /root/elk/es-config:/usr/share/elasticsearch/config \
-v /root/elk/es-logs:/usr/share/elasticsearch/logs \
-v /root/elk/es-plugins:/usr/share/elasticsearch/plugins \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
docker.elastic.co/elasticsearch/elasticsearch:8.14.3