【笔记】通过Docker部署Elasticsearch

前言

通过Docker部署Elasticsearch

创建一个网络

es-network:定义一个网络名称

1
docker network create es-network

部署Elasticsearch

拉取镜像

  • 本案例以7.12.1版本部署为例
1
docker pull elasticsearch:7.12.1

创建用于映射数据卷的目录

1
2
mkdir -p /root/es/es-data
mkdir -p /root/es/es-plugins

运行容器

-e "ES_JAVA_OPTS=-Xms512m -Xmx512m":指定JVM的内存,默认为1T
-e "discovery.type=single-node":指定启动的模式为单点模式
-v es-data::指定数据保存目录
-v es-plugins::指定插件目录
--network es-network:指定网络
-p 9200:9200:指定HTTP协议接口的端口映射
-p 9300:9300:指定各个节点之间通讯的端口映射

1
2
3
4
5
6
7
8
9
10
11
12
docker run \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v /root/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /root/es/plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-network \
-p 9200:9200 \
-p 9300:9300 \
-d \
elasticsearch:7.12.1

完成

部署Kibana

  • Kibana需要与Elasticsearch在同一个网络

拉取镜像

  • 本案例以7.12.1版本部署为例
1
docker pull kibana:7.12.1

运行容器

-e ELASTICSEARCH_HOSTS=http://es:9200:指定Elasticsearch容器的地址。如果不指定,缺省值为http://elasticsearch:9200
--network es-network:指定网络

1
2
3
4
5
6
7
docker run \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network es-network \
-p 5601:5601 \
-d \
kibana:7.12.1

完成

部署ik分词器

1
2
3
4
docker exec -it es /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
exit
docker restart es

手动下载ik分词器

  • 网络不好的情况下可以手动下载ik分词器,然后放到es插件目录下,然后重新执行安装操作会自动跳过下载
  • 重启es完成插件载入
1
2
3
4
5
6
7
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
mv ./elasticsearch-analysis-ik-7.12.1.zip /root/es/es-plugins/

docker exec -it es /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
exit
docker restart es
  • 也可以手动解压,然后重启es完成插件载入
1
2
3
4
5
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
mv ./elasticsearch-analysis-ik-7.12.1.zip /root/es/es-plugins/
cd /root/es/es-plugins/
unzip elasticsearch-analysis-ik-7.12.1.zip
docker restart es

如果是es集群,安装完插件后需要重启整个集群才可以完成插件载入

部署pinyin分词器

  • 通过中文拼音首字母就能查询到中文词组
1
2
3
4
docker exec -it es /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.12.1/elasticsearch-analysis-pinyin-7.12.1.zip
exit
docker restart es

踩坑

  • 拉取Kibana镜像时报错:no matching manifest for linux/arm64/v8 in the manifest list entries

原因

  • AppleSilicon与Intel不兼容

解决问题

  • 强制拉取x86_64架构的镜像

--platform linux/x86_64:如果有多种架构的镜像版本,指定需要拉取的架构版本

1
docker pull --platform linux/x86_64 kibana:7.12.1

踩坑

  • 运行Kibana容器后,访问管理页面不成功,前段报错:Kibana server is not ready yet,后端报错:License information could not be obtained from Elasticsearch due to Error: No Living connections erroUnable to retrieve version information from Elasticsearch nodes.

原因

  • Kibana配置的Elasticsearch地址不正确
  • 配置文件config/kibana.yml中配置的Elasticsearch地址缺省值为:elasticsearch.hosts: [ "http://elasticsearch:9200" ]

解决问题

方法一

  • 将Elasticsearch启动时,名称改为elasticsearch

方法二

  • 修改配置文件config/kibana.yml中Elasticsearch地址的配置

方法三

  • 在运行容器时,根据当前的Elasticsearch地址,指定环境变量-e ELASTICSEARCH_HOSTS=http://es:9200

完成

参考文献

哔哩哔哩——黑马程序员
CSDN——会写代码的花城
CSDN——Elsez
knowledgedict
哔哩哔哩——枫枫知道