使用 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 种解决方案:

  1. 在 docker-compose.yml 中,设置 elasticsearch 的 privileged 为 true ;(不建议在生产环境中使用)
  2. 使用 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 次启动需要重设密码。

posted @   lancer又双叒叕死啦  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示