插件窝 干货文章 es可以用docker部署吗

es可以用docker部署吗

Elasticsearch Docker 部署 节点 118    来源:    2025-05-02

Elasticsearch 在 Docker 中的部署

是的,Elasticsearch (ES) 完全可以使用 Docker 部署,这实际上是生产环境中非常常见的做法。以下是关于 Docker 部署 Elasticsearch 的关键信息:

官方 Docker 镜像

Elastic 官方提供了 Elasticsearch 的 Docker 镜像: - 官方镜像仓库:docker.elastic.co/elasticsearch/elasticsearch - Docker Hub 镜像:elasticsearch (但推荐使用官方仓库)

基本部署方式

单节点部署

docker run -d --name elasticsearch \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  docker.elastic.co/elasticsearch/elasticsearch:8.12.0

生产环境多节点集群

# 节点1
docker run -d --name es01 \
  --net elastic \
  -p 9200:9200 \
  -e "node.name=es01" \
  -e "cluster.name=es-docker-cluster" \
  -e "discovery.seed_hosts=es02,es03" \
  -e "cluster.initial_master_nodes=es01,es02,es03" \
  -e "bootstrap.memory_lock=true" \
  --ulimit memlock=-1:-1 \
  docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 节点2和3类似,修改节点名称和端口映射

重要配置注意事项

  1. 内存限制:ES 对内存敏感,建议通过 -e ES_JAVA_OPTS="-Xms1g -Xmx1g" 设置 JVM 堆大小

  2. 持久化存储:使用 volume 挂载数据目录

    -v es_data:/usr/share/elasticsearch/data
    
  3. 安全配置:从 8.0 开始默认启用安全功能,首次运行会输出默认密码

  4. 性能调优

    • 增加 ulimit 限制
    • 禁用交换分区 -e "bootstrap.memory_lock=true"

使用 Docker Compose 部署

推荐使用 docker-compose.yml 文件管理多节点集群:

version: '3'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es_data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

  es02:
    # 类似配置...

volumes:
  es_data01:
  es_data02:

networks:
  elastic:
    driver: bridge

常见问题解决

  1. 启动失败:检查日志 docker logs <container_id>
  2. 内存不足:调整 JVM 堆大小或增加 Docker 内存限制
  3. 权限问题:确保数据目录有正确权限,或使用 -e "TAKE_FILE_OWNERSHIP=true"

使用 Docker 部署 Elasticsearch 可以大大简化部署和扩展过程,特别适合开发和测试环境,生产环境则需要更多性能和安全配置。