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"
相关推荐
小猿姐几秒前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站12 小时前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站1 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ2 天前
Kubeneters HA Cluster部署
运维
lichenyang4532 天前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang4532 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4532 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4532 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
江华森2 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森2 天前
Matplotlib 数据绘图基础入门
运维