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"
相关推荐
岁岁种桃花儿1 小时前
构建SpringBoot项目Docker镜像并发布到k8s集群中进行运行
spring boot·docker·kubernetes
Riu_Peter2 小时前
【记录】Ubuntu 安装 Docker
ubuntu·docker·eureka
人间打气筒(Ada)2 小时前
Docker主机集群化方案 Docker Swarm
运维·docker·容器·docker swarm·docker stack
white-persist2 小时前
【内网运维 联合解析】Docker 全体系详解(功能原理 + 命令参数 + 实战攻防)
运维·docker·容器
程序 代码狂人3 小时前
帆软-服务器器数据集权限配置
运维·服务器
代码游侠10 小时前
ARM开发——阶段问题综述(二)
运维·arm开发·笔记·单片机·嵌入式硬件·学习
Mr.朱鹏11 小时前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
java_logo11 小时前
OpenCode 企业级 Docker 部署完整指南
运维·docker·容器·opencode·opencode本地化部署·opencode部署手册·opencode部署方案
再战300年11 小时前
docker下创建redis集群方案
redis·docker·容器