创建自定义网络
创建一个名为 es-net 的桥接网络。这将作为 Elasticsearch 和 Kibana 的私有通信通道。
bash
# 创建网络
docker network create es-net
# 查看网络是否创建成功
docker network ls

启动 Elasticsearch 容器
安装命令
bash
docker run -d \
--name elasticsearch \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-v es_data:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:8.11.0

参数解释
- -d:在后台运行容器(守护进程模式)。
- --name elasticsearch:为容器指定一个名称,后续 Kibana 将通过这个名称 elasticsearch 来访问它。
- --network es-net:将容器连接到刚创建的自定义网络。
- -p 9200:9200:将容器的 9200 端口(HTTP API 端口)映射到宿主机的 9200 端口,以便从宿主机访问。
- -p 9300:9300:将容器的 9300 端口(节点间通信端口)映射出来,通常其他 Elasticsearch 节点会通过这个端口通信,单节点模式下非必须,但建议保留。
- -e "discovery.type=single-node":设置 Elasticsearch 为单节点模式,简化配置。
- -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":为 Elasticsearch 分配 512MB 的堆内存。
- -v es_data:/usr/share/elasticsearch/data:将数据目录挂载到名为 es_data 的 Docker 卷中,防止容器删除后数据丢失。
- docker.elastic.co/...:8.11.0:指定使用的镜像和版本。
安装验证
通过网页访问9200端口,提示要输入用户和密码。
但是在安装时没有为ES设置用户名和密码,查找资料发现ES会有个默认超级用户elastic,但是需要我们手动为这个用户设置密码。
ES设置密码
- 进入容器
使用 docker exec 命令以交互模式(-it)进入正在运行的容器。
bash
docker exec -it elasticsearch /bin/bash
- 在容器内执行密码设置命令
Elasticsearch 提供了内置的 elasticsearch-setup-passwords 工具来批量设置所有内置用户的密码。
重要提示: 此命令会为所有内置用户(如 elastic, kibana_system, apm_system 等)设置新密码。如果你不是首次设置,它将重置所有密码(ps:elastic)。
bash
# 使用 interactive (交互) 模式
elasticsearch-setup-passwords interactive

再次安装验证
输入用户及密码后,验证成功
启动Kibana容器
启动命令
bash
docker run -d \
--name kibana \
--network es-net \
-p 5601:5601 \
-v /usr/share/elasticsearch/config/certs/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt:ro \
-e "ELASTICSEARCH_HOSTS=https://elasticsearch:9200" \
-e "ELASTICSEARCH_USERNAME=kibana_system" \
-e "ELASTICSEARCH_PASSWORD=***" \
-e "ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/elasticsearch/config/certs/http_ca.crt" \
-e "ELASTICSEARCH_SSL_VERIFICATIONMODE=certificate" \
docker.elastic.co/kibana/kibana:8.11.0
参数解释
- --name kibana:为容器指定名称。
- --network es-net:让 Kibana 容器加入到与 Elasticsearch 同一个自定义网络中。
- -p 5601:5601:将容器的 5601 端口映射到宿主机的 5601 端口。
- -v /usr/share/elasticsearch/config/certs/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt:ro:将ES生成的认证证书挂载到容器内,kibana容器启动时会访问
- -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200":关键! 这里设置了 Elasticsearch 的 URL。注意,主机名用的就是 Elasticsearch 容器的名称 elasticsearch。这是因为在自定义网络 elastic-net 中,Docker 内置的 DNS 服务会自动将容器名称解析为其内部 IP 地址。
- -e "ELASTICSEARCH_USERNAME=kibana_system":8.x版本的es默认开启了安全认证,使用kibana_system用户连接
- -e "ELASTICSEARCH_PASSWORD=***":8.x版本的es需要连接密码,在此使用kibana_system用户访问es的密码。
- -e "ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/elasticsearch/config/certs/http_ca.crt": 告诉 Kibana CA 证书的路径
- -e "ELASTICSEARCH_SSL_VERIFICATIONMODE=certificate":启动时验证证书
- docker.elastic.co/...:8.11.0:Kibana 的版本必须与 Elasticsearch 的版本一致。
安装验证
访问ES端口,因为开启了安全认证,输入ES超级用户elastic的用户名及密码即可登录。
安装IK分词器
下载IK分词器
下载版本和ES版本保持一致:8.11.0
安装
- 直接通过数据卷共享将zip文件同步到容器中的挂载点目录下
- 安装
bash
bin/elasticsearch-plugin install file:///usr/share/elasticsearch/data/elasticsearch-analysis-ik-8.11.0.zip

验证
