安装elasticsearch
下载elasticsearch,查看版本:Elasticsearch Guide [8.11] | Elastic
docker pull elasticsearch:7.17.16查看镜像是否下载成功
docker images创建网络,因为需要部署kibana容器,要让es和kibana容器互联
# 创建一个网络:
es-net docker network create es-net 
# 查看本机的网络 
docker network ls
# 删除一个网络:
es-net docker network rm es-net创建es容器挂载目录
mkdir -p /var/lib/docker/volumes/es-data/_data 
mkdir -p /var/lib/docker/volumes/es-plugins 
mkdir -p /var/lib/docker/volumes/es-config 
mkdir -p /var/lib/docker/volumes/kibana-config 
touch elasticsearch.yml 
# 默认内容: 
‘cluster.name: "docker-cluster" network.host: 0.0.0.0’ 
touch kibana.yml 
# 默认内容: 其中elasticsearch为es容器名
‘ 
server.host: "0.0.0.0" 
server.shutdownTimeout: "5s" 
elasticsearch.hosts: [ "http://elasticsearch:9200" ] 
monitoring.ui.container.elasticsearch.enabled: true 
’注意事项:
1)需要保证要挂载的目录有读写权限,包括要挂载的配置文件。如果没有则用chmod 777命令
2)如果要挂载配置文件,则需要提前把配置文件内容写好,不能为空,否则可能会影响es和kibana运行。
3)如果只挂载到配置文件目录,不准备配置文件,会导致创建容器后没有配置文件报错。
启动es容器
docker run -itd --name es -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -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 elasticsearch:7.17.16注意:后面不要加 /bin/bash
命令解释:
| -p 9200:9200 | 将容器9200端口映射到宿主机的9200端口,以后给ES发Rest API请求走9200 | 
| -p 9300:9300 | ES在分布式集群状态下,它们节点之间的通信端口 | 
| -e "cluster.name=es-docker-cluster" | 设置集群名称 | 
| -e "http.host=0.0.0.0" | 监听的地址,可以外网访问 | 
| -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" | 内存大小 | 
| -e "discovery.type=single-node" | 非集群模式 | 
| -v /var/lib/docker/volumes/es-data/_data | 挂载逻辑卷,绑定es的数据目录 | 
| -v /var/lib/docker/volumes/es-config/elasticsearch.yml | 挂载逻辑卷,绑定es的配置文件 | 
| -v /var/lib/docker/volumes/es-plugins | 挂载逻辑卷,绑定es的插件目录 | 
| -–privileged | 授予逻辑卷访问权 | 
| -–network es-net | 加入一个名为es-net的网络中 | 
访问 http://localhost:9200,查看效果

开启es安全验证
# 进入到容器中 
docker exec -it 容器id/名字 /bin/bash 
# cd到config目录下修改elasticsearch.yml,并放入以下内容: 
‘ 
# 这俩是跨域配置 
http.cors.enabled: true 
http.cors.allow-origin: "*" 
# 开启X-pack设置密码 
http.cors.allow-headers: 
Authorization xpack.security.enabled: true 
xpack.security.transport.ssl.enabled: true 
’如果没有vi命令
apt-get update 
apt-get install vim重启es
docker restart 容器id/名字再次进入到容器中
# 进入容器 
docker exec -it es /bin/bash 
# 进入bin文件夹
cd bin/ 
# 创建用户,并赋予权限 
./elasticsearch-users useradd gusy -r superuser 
# 以交互的方式设置用户名和密码(记住自己设置的密码) 
./elasticsearch-setup-passwords interactive重启es容器,再次访问 http://localhost:9200查看效果,此时需要输入密码
docker restart 容器id/名字
安装kibana
下载kibana镜像,,与ES版本要一致
docker pull kibana:7.17.16启动kibana容器
docker run -itd --name kibana17 -e ELASTICSEARCH_HOSTS=http://elasticsearch7.17.16:9200 --network=es-net -p 5601:5601 kibana:7.17.16命令解释:
| -e ELASTICSEARCH_HOSTS=http://elasticsearch7.17.16:9200 | 其中elasticsearch7.17.16为es容器名称 | 
进入kibana容器
-- 0 表示 root 用户
docker exec -u 0 -it id /bin/bash容器中执行以下命令
cd config vi kibana.yml 
# 键入es的用户名和密码 
‘ 
elasticsearch.username: "gusy" 
elasticsearch.password: "gusy" 
’重启kibana容器
docker restart kibana17注意:如果改了配置文件导致重启失败,执行以下命令
# 查看错误日志 
docker logs kibana17 -f 
# 复制配置文件到本地 
docker cp kibana17:/usr/share/kibana/config/kibana.yml /usr/local/software/temp/ 
# 修改完配置后,再将配置复制到容器 
docker cp kibana.yml kibana17:/usr/share/kibana/config/kibana.yml 
# 重启容器 
docker restart kibana17成功

安装IK分词器
下载链接:要与ES版本一致,下载.zip版本
Releases · medcl/elasticsearch-analysis-ik · GitHub
上传到服务器(windows到linux服务器)
scp .\elasticsearch-analysis-ik-7.17.16.zip root@101.35.250.22:/usr/local/software/temp进入ES容器,在plugins文件夹下创建ik文件夹
# 进入容器 
docker exec -it es /bin/bash 
# 创建文件夹 
mkdir -p /usr/share/elasticsearch/plugins/ik 
# 退出容器 
exit将ik.zip文件复制到容器
docker cp elasticsearch-analysis-ik-7.17.16.zip es:/usr/share/elasticsearch/plugins/ik再次进入容器,解压上传的文件
# 进入容器 
docker exec -it es /bin/bash 
# 进入ik文件夹 
cd /usr/share/elasticsearch/plugins/ik/ 
# 解压 
unzip elasticsearch-analysis-ik-7.17.16.zip 
# 删除源文件 
rm -rf elasticsearch-analysis-ik-7.17.16.zip 
# 退出 exit重启es
docker restart es注意:注意在plugins/文件夹下不要有文件,只能有文件夹,否则重启失败,并且重新复制plugins/文件夹也没用,可以尝试以下方法解决。
# 查看es挂载目录 
docker inspect es 
# 找到挂载目录,Mounts下 
# 进入es-plugins挂载的目录,删除掉多余的文件 
cd /var/lib/docker/volumes/es-plugins/_data