Docker 创建 ES(with analysis-ik) + Kibana 容器

102 阅读3分钟

最近在负责公司项目的 ES 多条件检索功能,需要在本地的 ElasticSearchKibana Docker 容器上测试。

一、创建 ES 容器

1. 拉取镜像

docker pull elasticsearch:7.17.21

2. 创建网络

因为需要部署kibana容器,因此需要让es和kibana容器互联。

docker network create es-net

3. 创建挂载点目录

主要是在宿主机本地创建 dataplugins 两个目录。之前网上的教程还要求创建 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)两种调用容器内终端的方法

image.png

(2)跳转到 config/

cd config

(3)修改 yml 关闭密码验证

echo 'xpack.security.enabled: false' >> elasticsearch.yml

6. 重启 es 容器

Ctrl + pCtrl + 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方案:

  1. 打开 Docker Desktop
  2. 点击容器的 Files 页签
  3. usr/share/kibana/config/kibana.yml 下添加一行 i18n.locale: "zh-CN"
  4. 重启容器。

三、Docker 为 ES 安装中文分词器 IK

(一)从官网(而不是 Github)安装分词器

注意: IK 分词器版本必须和 ES 保持一致,然而GithubIK 版本不全。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

  1. 在伪终端按下 Ctrl + pCtrl + q 退出伪终端,
  2. docker restart es_ik 重启。