docker在自定义网络中安装ElasticSearch和Kibana

创建自定义网络

创建一个名为 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

参数解释

  1. -d:在后台运行容器(守护进程模式)。
  2. --name elasticsearch:为容器指定一个名称,后续 Kibana 将通过这个名称 elasticsearch 来访问它。
  3. --network es-net:将容器连接到刚创建的自定义网络。
  4. -p 9200:9200:将容器的 9200 端口(HTTP API 端口)映射到宿主机的 9200 端口,以便从宿主机访问。
  5. -p 9300:9300:将容器的 9300 端口(节点间通信端口)映射出来,通常其他 Elasticsearch 节点会通过这个端口通信,单节点模式下非必须,但建议保留。
  6. -e "discovery.type=single-node":设置 Elasticsearch 为单节点模式,简化配置。
  7. -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":为 Elasticsearch 分配 512MB 的堆内存。
  8. -v es_data:/usr/share/elasticsearch/data:将数据目录挂载到名为 es_data 的 Docker 卷中,防止容器删除后数据丢失。
  9. docker.elastic.co/...:8.11.0:指定使用的镜像和版本。

安装验证

通过网页访问9200端口,提示要输入用户和密码。

但是在安装时没有为ES设置用户名和密码,查找资料发现ES会有个默认超级用户elastic,但是需要我们手动为这个用户设置密码。

ES设置密码

  1. 进入容器
    使用 docker exec 命令以交互模式(-it)进入正在运行的容器。
bash 复制代码
docker exec -it elasticsearch /bin/bash
  1. 在容器内执行密码设置命令
    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

参数解释

  1. --name kibana:为容器指定名称。
  2. --network es-net:让 Kibana 容器加入到与 Elasticsearch 同一个自定义网络中。
  3. -p 5601:5601:将容器的 5601 端口映射到宿主机的 5601 端口。
  4. -v /usr/share/elasticsearch/config/certs/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt:ro:将ES生成的认证证书挂载到容器内,kibana容器启动时会访问
  5. -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200":关键! 这里设置了 Elasticsearch 的 URL。注意,主机名用的就是 Elasticsearch 容器的名称 elasticsearch。这是因为在自定义网络 elastic-net 中,Docker 内置的 DNS 服务会自动将容器名称解析为其内部 IP 地址。
  6. -e "ELASTICSEARCH_USERNAME=kibana_system":8.x版本的es默认开启了安全认证,使用kibana_system用户连接
  7. -e "ELASTICSEARCH_PASSWORD=***":8.x版本的es需要连接密码,在此使用kibana_system用户访问es的密码。
  8. -e "ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/elasticsearch/config/certs/http_ca.crt": 告诉 Kibana CA 证书的路径
  9. -e "ELASTICSEARCH_SSL_VERIFICATIONMODE=certificate":启动时验证证书
  10. docker.elastic.co/...:8.11.0:Kibana 的版本必须与 Elasticsearch 的版本一致。

安装验证

访问ES端口,因为开启了安全认证,输入ES超级用户elastic的用户名及密码即可登录。

安装IK分词器

下载IK分词器

ik分词器下载地址

下载版本和ES版本保持一致:8.11.0

安装

  1. 直接通过数据卷共享将zip文件同步到容器中的挂载点目录下
  2. 安装
bash 复制代码
bin/elasticsearch-plugin install file:///usr/share/elasticsearch/data/elasticsearch-analysis-ik-8.11.0.zip

验证

相关推荐
007php00722 分钟前
Jenkins+docker 微服务实现自动化部署安装和部署过程
运维·数据库·git·docker·微服务·自动化·jenkins
励志五个月成为嵌入式糕手2 小时前
0825 http梳理作业
网络·网络协议·http
{⌐■_■}4 小时前
【ElasticSearch】使用docker compose,通过编写yml安装es8.15和kibana可视化界面操作,go连接es
elasticsearch·docker·golang
左灯右行的爱情4 小时前
分库分表系列-基础内容
网络·数据库·oracle
DebugKitty4 小时前
网络编程1-基本概念、函数接口
运维·服务器·网络·网络协议·socket·tcp
Monly214 小时前
Docker:部署Nginx
nginx·docker·容器
HONG_YANG4 小时前
2025年 三个 Docker Compose 可视化管理器测评
docker
2501_921290445 小时前
嵌入式第三十六天(网络编程(TCP))
网络·网络协议·tcp/ip
Monly215 小时前
Docker:技巧汇总
运维·docker·容器