使用 Docker Compose 安装最新版 Elasticsearch 完整指南

使用 Docker Compose 安装最新版 Elasticsearch 完整指南

Elasticsearch 是目前最流行的分布式搜索和分析引擎,广泛应用于日志分析、全文搜索、监控指标等场景。本文将详细介绍如何通过 Docker Compose 快速部署最新版的 Elasticsearch。


一、环境要求

在开始之前,请确保你的系统满足以下条件:

  • Docker:版本 20.10.10 或更高
  • Docker Compose:已安装(Docker Desktop 默认包含)
  • 内存:建议至少 4GB 可用内存(Elasticsearch 比较吃内存)
  • 系统:Linux / macOS / Windows 均可

二、拉取镜像

首先,拉取最新版的 Elasticsearch 镜像:

# 拉取最新版本(写作时为 9.x)
docker pull docker.elastic.co/elasticsearch/elasticsearch:latest

# 或者指定具体版本(推荐生产环境使用)
docker pull docker.elastic.co/elasticsearch/elasticsearch:9.3.1

💡 提示:生产环境建议锁定具体版本号,避免意外升级带来的兼容性问题。


三、编写 docker-compose.yml

创建一个项目目录,并在其中创建 docker-compose.yml 文件:

version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:9.3.1
    container_name: elasticsearch
    environment:
      # 节点名称
      - node.name=es-node-1
      # 单节点模式(开发环境推荐)
      - discovery.type=single-node
      # 启用安全认证
      - xpack.security.enabled=true
      - xpack.security.enrollment.enabled=true
      # 设置 elastic 超级用户密码
      - ELASTIC_PASSWORD=your_strong_password_here
      # 内存设置(重要!)
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      # 数据持久化
      - es_data:/usr/share/elasticsearch/data
      # 配置文件(可选)
      # - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    networks:
      - elastic_network
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: ["CMD-SHELL", "curl -s http://localhost:9200 >/dev/null || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5

volumes:
  es_data:
    driver: local

networks:
  elastic_network:
    driver: bridge

四、配置说明

4.1 关键环境变量解释

变量 说明
node.name 节点名称,集群模式下每个节点应唯一
discovery.type 设为 single-node 表示单节点模式,适合开发测试
xpack.security.enabled 是否启用安全认证(生产环境必须开启)
ELASTIC_PASSWORD elastic 超级用户的初始密码
ES_JAVA_OPTS JVM 堆内存设置,建议设为物理内存的 50%,且 Xms = Xmx

4.2 内存设置建议

Elasticsearch 对内存非常敏感,以下是一些建议:

  • 开发环境:1GB – 2GB 堆内存足够
  • 小型生产:4GB – 8GB 堆内存
  • 大型集群:16GB+ 堆内存,但不要超过 32GB(JVM 压缩指针限制)

五、启动 Elasticsearch

# 进入项目目录
cd /path/to/your/elasticsearch

# 启动服务(后台运行)
docker-compose up -d

# 查看启动日志
docker-compose logs -f elasticsearch

等待启动完成(通常需要 30-60 秒),看到类似以下日志表示启动成功:

elasticsearch | {"@timestamp":"...","log.level":"INFO","message":"started","ecs.version":"1.2.0"}

六、验证安装

6.1 健康检查

# 检查 Elasticsearch 是否正常运行
curl -u elastic:your_strong_password_here http://localhost:9200/_cluster/health?pretty

返回结果中 statusgreenyellow(单节点模式)表示正常:

{
  "cluster_name" : "docker-cluster",
  "status" : "yellow",
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  ...
}

6.2 查看节点信息

curl -u elastic:your_strong_password_here http://localhost:9200/_cat/nodes?v

6.3 查看索引列表

curl -u elastic:your_strong_password_here http://localhost:9200/_cat/indices?v

七、搭配 Kibana 使用(可选)

Kibana 是 Elasticsearch 的官方可视化界面,强烈推荐搭配使用。

docker-compose.yml 中添加 Kibana 服务:

  kibana:
    image: docker.elastic.co/kibana/kibana:9.3.1
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=your_kibana_password
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - elastic_network

启动后访问 http://localhost:5601 即可进入 Kibana 界面。


八、常用运维命令

# 停止服务
docker-compose stop

# 重启服务
docker-compose restart

# 停止并删除容器(数据卷保留)
docker-compose down

# 完全清理(包括数据卷,谨慎使用!)
docker-compose down -v

# 查看资源使用情况
docker stats elasticsearch

# 进入容器内部
docker exec -it elasticsearch bash

九、生产环境注意事项

  1. 安全配置
    • 必须启用 xpack.security.enabled=true
    • 修改默认密码,使用强密码
    • 配置 HTTPS/TLS 加密通信
  2. 资源限制
    • 设置合理的 JVM 堆内存
    • 配置 Docker 资源限制(CPU、内存)
  3. 数据持久化
    • 确保数据目录挂载到宿主机或使用 Docker Volume
    • 定期备份数据
  4. 集群部署
    • 生产环境建议至少 3 节点集群
    • 配置正确的 discovery.seed_hostscluster.initial_master_nodes
  5. 系统优化
    • 禁用 swap(swapoff -a
    • 增加文件描述符限制
    • 调整虚拟内存设置

十、常见问题排查

Q1: 启动失败,报 “max virtual memory areas vm.max_map_count” 错误

# Linux 系统执行
sudo sysctl -w vm.max_map_count=262144

# 永久生效
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

Q2: 容器启动后立即退出

检查日志:docker-compose logs elasticsearch

常见原因:

  • 内存不足
  • 数据目录权限问题
  • 端口被占用

Q3: 无法连接到 Elasticsearch

  • 检查端口是否正确暴露:docker-compose ps
  • 检查防火墙设置
  • 确认用户名密码正确

总结

通过 Docker Compose 部署 Elasticsearch 非常方便,几条命令就能搭建一个可用的搜索服务。但要注意:

  • 开发环境可以用单节点 + 禁用安全认证,方便调试
  • 生产环境必须关注安全、高可用、资源规划
  • 合理设置 JVM 内存,避免 OOM

希望这篇指南对你有所帮助!


参考资料: