最近在负责公司项目的 ES 多条件检索功能,需要在本地的 ElasticSearch
和 Kibana
Docker 容器上测试。
一、创建 ES 容器
1. 拉取镜像
docker pull elasticsearch:7.17.21
2. 创建网络
因为需要部署kibana容器,因此需要让es和kibana容器互联。
docker network create es-net
3. 创建挂载点目录
主要是在宿主机本地创建 data
和 plugins
两个目录。之前网上的教程还要求创建 config
目录,后面如果使用
-v D:\es_docker_volume\config:/usr/share/elasticsearch/config
挂载到容器中的 /config/
(实际不存在这个目录)将导致容器无限重启。
4. 创建 ES 容器
docker run -d
--restart=always
--name es_ik
--network es-net
-p 9200:9200
-p 9300:9300
--privileged
-v D:\es_docker_volume\data:/usr/share/elasticsearch/data
## -v D:\es_docker_volume\config:/usr/share/elasticsearch/config
-v D:\es_docker_volume\plugins:/usr/share/elasticsearch/plugins
-e "discovery.type=single-node"
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
elasticsearch:7.17.21
注意,不需要挂载 config
目录,否则将会报以下错误并容器无限重启
2024-06-06 17:02:29 Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options
2024-06-06 17:02:29 at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
2024-06-06 17:02:29 at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
2024-06-06 17:02:29 at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
2024-06-06 17:02:29 at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:261)
2024-06-06 17:02:29 at java.base/java.nio.file.Files.newByteChannel(Files.java:379)
2024-06-06 17:02:29 at java.base/java.nio.file.Files.newByteChannel(Files.java:431)
2024-06-06 17:02:29 at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420)
2024-06-06 17:02:29 at java.base/java.nio.file.Files.newInputStream(Files.java:159)
2024-06-06 17:02:29 at org.elasticsearch.tools.launchers.JvmOptionsParser.readJvmOptionsFiles(JvmOptionsParser.java:168)
2024-06-06 17:02:29 at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:124)
2024-06-06 17:02:29 at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)
5. 进入容器环境,并修改 elasticsearch.yml
(1)两种调用容器内终端的方法
(2)跳转到 config/
cd config
(3)修改 yml 关闭密码验证
echo 'xpack.security.enabled: false' >> elasticsearch.yml
6. 重启 es 容器
按 Ctrl + p
和 Ctrl + q
退出伪终端,然后重启
docker restart es
tips: Docker Hub
可以比较方便地修改镜像内文件
要修改的文件通常位于 usr/share/
下
![[Pasted image 20240606161338.png]]
二、Docker 安装 Kibana
1. 拉取镜像
docker pull kibana:7.17.21
2. 宿主机本地创建挂载目录 data
新建文件夹即可
3. 创建 Kibana 容器
docker run -d
--restart=always
--name kibana_7.17.21
--network es-net
-p 5601:5601
-e ELASTICSEARCH_HOSTS=http://es_ik:9200 # 此处的 es_ik 是 Elasticsearch 的容器名,一定要和 容器名 保持一致
kibana:7.17.21
合成一行,方便复制粘贴:
docker run -d --restart=always --name kibana_7.17.21 --network es-net -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://es_ik:9200 kibana:7.17.21
4. 修改 i18n 汉化
最省事的是GUI方案:
- 打开 Docker Desktop
- 点击容器的 Files 页签
- 在
usr/share/kibana/config/kibana.yml
下添加一行i18n.locale: "zh-CN"
- 重启容器。
三、Docker 为 ES 安装中文分词器 IK
(一)从官网(而不是 Github)安装分词器
注意: IK
分词器版本必须和 ES
保持一致,然而Github
上 IK
版本不全。IK
官网Index of: analysis-ik/stable/ (infinilabs.com)
原本的命令是:❌
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip
↓ IK 官网地址:✔
./bin/elasticsearch-plugin install https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.21.zip
-
./bin/elasticsearch-plugin
:这是 Elasticsearch 提供的插件管理工具,用于安装、移除和管理 Elasticsearch 插件。你需要在 Elasticsearch 的安装目录下运行这个命令。 -
install
:这是插件管理工具的一个子命令,用于安装插件。 -
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip
:这是要安装的 IK 分词器插件的下载 URL。这个 URL 指向IK
官网infinilabs
上发布的 IK 分词器插件的 zip 包。
(二)重启 ES
- 在伪终端按下
Ctrl + p
和Ctrl + q
退出伪终端, docker restart es_ik
重启。