使用 docker 部署 ElasticSearch 教程
1.使用 docker 部署 ElasticSearch 教程
1. 准备镜像
使用 docker 部署 ElasticSearch 需要 2 个镜像:
docker pull elasticsearch:8.17.0
docker pull kibana:8.17.0
[!TIP]
- 版本号 8.17.0 并非强制要求,而是编写本文档时,用来试验的版本号;实际上只要 kibana 和 elasticsearch 两者的版本没有冲突就行
2. 准备配置文件
2.1. docker-compose.yml
docker-compose.yml 的具体内容如下所示:
services:
elasticsearch:
image: elasticsearch:8.17.0
container_name: elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
- http.host=0.0.0.0
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- ELASTIC_USERNAME=elastic # 设置管理员用户名
- ELASTIC_PASSWORD=RVoqcba3F7q # 设置管理员密码
- xpack.security.http.ssl.enabled=false # 设置关闭 SSL(https)
volumes:
- ./volumes/elasticsearch/data:/usr/share/elasticsearch/data
- ./volumes/elasticsearch/plugins:/usr/share/elasticsearch/plugins
- ./volumes/elasticsearch/logs:/usr/share/elasticsearch/logs
# - ./volumes/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- "9200:9200"
- "9300:9300"
networks:
- default_network
kibana:
image: kibana:8.17.0
container_name: kibana
restart: unless-stopped
volumes:
- ./volumes/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- "5601:5601"
networks:
- default_network
depends_on:
- elasticsearch
networks:
default_network:
external: true
在运行上面的 docker-compose.yml 前,需要先创建 docker network: docker network create default_network
。
由于 elasticsearch 容器在运行时,容器内部运行进程的用户是 elasticsearch 而非 root 。所以如果是以 root 用户创建了挂载目录并运行 docker-compose ,有可能会使 elasticsearch 容器在运行时出现权限错误等异常。为了解决该问题,大概有以下 2 种解决方案:
- 在 docker-compose.yml 中,设置 elasticsearch 的
privileged
为 true ;(不建议在生产环境中使用) - 使用 chmod 命令修改挂载目录的权限
[!TIP]
- 创建 docker network 并不是必要的步骤,主要是让两个容器处在同一个 docker network 下,以便后续配置 elasticsearch.yml 和 kibana.yml 时,使用容器名替代 IP 地址
- 这里没有将 elasticsearch.yml 挂载出来,因为会报一些奇奇怪怪的错误
2.2. kibana.yml
kibana.yml 的具体内容如下所示:
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ] # 如果 elasticsearch 和 kibana 两个容器处于同一个 docker network 中,可以使用容器名替代 IP
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN" # 设置 kibana 为中文界面
elasticsearch.username: "kibana_system" # 用于和 elasticsearch 通信的用户名
elasticsearch.password: "b0hfLHUcVO5" # 用于和 elasticsearch 通信的密码
elasticsearch.ssl.verificationMode: none
3. 启动容器
先运行 docker-compose up -d
来启动 2 个容器。
第 1 次启动 elasticsearch 容器需要设置 kibana_system 的密码,所以等待 elasticsearch 启动后,可以通过 elasticsearch 对外暴露的 REST API 来修改密码,即运行下面的命令:
curl -X PUT "http://宿主机IP:9200/_security/user/kibana_system/_password" \
-u "elastic:RVoqcba3F7q" \
-H "Content-Type: application/json" \
-d '{
"password": "b0hfLHUcVO5"
}'
在请求完成后,需要重新启动容器: docker-compose restart
。
在不删除容器挂载目录的情况下,只有第 1 次启动需要重设密码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?