目录
准备镜像
使用 docker 部署 ElasticSearch 需要 2 个镜像:
docker pull elasticsearch:8.17.0
docker pull kibana:8.17.0
[!TIP]
- 版本号 8.17.0 并非强制要求,而是编写本文档时,用来试验的版本号;实际上只要 kibana 和 elasticsearch 两者的版本没有冲突就行
准备配置文件
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 挂载出来,因为会报一些奇奇怪怪的错误
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
启动容器
先运行 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 次启动需要重设密码。
标签:容器,教程,network,kibana,elasticsearch,ElasticSearch,docker,yml From: https://www.cnblogs.com/17hrbeucgn/p/18661788