Docker单节点部署Elasticsearch 9.0+(开发环境)

安装Docker和Docker Compose

确保系统已安装Docker和Docker Compose。可通过以下命令检查版本:

bash 复制代码
docker --version
docker-compose --version

若未安装,参考官方文档安装:


拉取Elasticsearch镜像

拉取官方Elasticsearch 9.0+镜像:

bash 复制代码
docker pull docker.elastic.co/elasticsearch/elasticsearch:9.0.0

单节点部署(开发环境)

创建单节点Elasticsearch容器:

bash 复制代码
docker run -d --name elasticsearch \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
  -e "xpack.security.enabled=false" \
  docker.elastic.co/elasticsearch/elasticsearch:9.0.0

参数说明:

  • -p 9200:9200:暴露HTTP API端口
  • -p 9300:9300:暴露集群通信端口
  • discovery.type=single-node:单节点模式
  • ES_JAVA_OPTS:JVM堆内存配置
  • xpack.security.enabled=false:禁用安全功能(仅测试环境)

生产环境多节点部署

使用docker-compose.yml部署集群:

yaml 复制代码
version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:9.0.0
    environment:
      - cluster.name=es-cluster
      - node.name=es-node1
      - discovery.seed_hosts=es-node1,es-node2
      - cluster.initial_master_nodes=es-node1,es-node2
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms2g -Xmx2g
      - xpack.security.enabled=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es-data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - es-net

  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:9.0.0
    environment:
      - cluster.name=es-cluster
      - node.name=es-node2
      - discovery.seed_hosts=es-node1,es-node2
      - cluster.initial_master_nodes=es-node1,es-node2
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms2g -Xmx2g
      - xpack.security.enabled=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es-data2:/usr/share/elasticsearch/data
    networks:
      - es-net

volumes:
  es-data:
  es-data2:

networks:
  es-net:

启动集群:

bash 复制代码
docker-compose up -d

验证安装

检查Elasticsearch是否运行:

bash 复制代码
curl -X GET "localhost:9200/"

安全模式下获取密码:

bash 复制代码
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

配置文件持久化

将配置文件挂载到宿主机:

bash 复制代码
docker run -d --name elasticsearch \
  -v ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  -v ./data:/usr/share/elasticsearch/data \
  docker.elastic.co/elasticsearch/elasticsearch:9.0.0

性能优化建议

  • 设置vm.max_map_count

    bash 复制代码
    sysctl -w vm.max_map_count=262144
  • 永久生效需写入/etc/sysctl.conf

  • 禁用交换分区:

    bash 复制代码
    swapoff -a
  • elasticsearch.yml中添加:

    yaml 复制代码
    bootstrap.memory_lock: true

常见问题解决

权限问题

bash 复制代码
chmod -R 777 /path/to/data

启动失败检查日志

bash 复制代码
docker logs elasticsearch

内存不足 : 调整ES_JAVA_OPTS环境变量,例如:

bash 复制代码
-e "ES_JAVA_OPTS=-Xms4g -Xmx4g"
相关推荐
航Hang*33 分钟前
Windows Server 配置与管理——第3章:文件系统管理
运维·服务器·windows·vmware
lifewange1 小时前
Linux ps 进程查看命令详解
linux·运维·服务器
功德+n1 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
小敬爱吃饭2 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
杨云龙UP2 小时前
从0到1快速学会Linux操作系统(基础),这一篇就够了!
linux·运维·服务器·学习·ubuntu·centos·ssh
HXQ_晴天2 小时前
Ubuntu 设置中文输入法
linux·运维·ubuntu
Dovis(誓平步青云)2 小时前
《Linux 信号入门:搞懂 “进程通信的紧急电话” 到底怎么用(初篇)》
linux·运维·服务器
0vvv02 小时前
删除wsl环境下的Ubuntu系统
linux·运维·ubuntu
木子欢儿2 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka