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"
相关推荐
小p1 天前
docker学习: 2. 构建镜像Dockerfile
docker
小p2 天前
docker学习: 1. docker基本使用
docker
蝎子莱莱爱打怪2 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀2 天前
Docker部署Nacos
docker·容器
缓解AI焦虑2 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
1candobetter3 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
DianSan_ERP3 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
呉師傅3 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒3 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器