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"
相关推荐
正经教主29 分钟前
【docker基础】第五课:Docker网络详解
运维·docker·容器
小黑蛋学java1 小时前
Nginx 接口耗时 Prometheus + Grafana 监控实施方案
运维·nginx·负载均衡·grafana·prometheus
鹤鸣的日常2 小时前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
asyxchenchong8883 小时前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
tianyuanwo3 小时前
项目内自我管理:一名OS领域DevOps的破局之路
运维·devops
三十..3 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
我是谁??5 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
jinglong.zha5 小时前
LScript-从零基础到商业变现的AI自动化学习平台
运维·学习·自动化
运维瓦工6 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Adorable老犀牛6 小时前
Telegraf:InfluxData 出品的指标采集代理
运维·telegraf