使用 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
返回结果中 status 为 green 或 yellow(单节点模式)表示正常:
{
"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
九、生产环境注意事项
- 安全配置:
- 必须启用
xpack.security.enabled=true - 修改默认密码,使用强密码
- 配置 HTTPS/TLS 加密通信
- 必须启用
- 资源限制:
- 设置合理的 JVM 堆内存
- 配置 Docker 资源限制(CPU、内存)
- 数据持久化:
- 确保数据目录挂载到宿主机或使用 Docker Volume
- 定期备份数据
- 集群部署:
- 生产环境建议至少 3 节点集群
- 配置正确的
discovery.seed_hosts和cluster.initial_master_nodes
- 系统优化:
- 禁用 swap(
swapoff -a) - 增加文件描述符限制
- 调整虚拟内存设置
- 禁用 swap(
十、常见问题排查
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
希望这篇指南对你有所帮助!
参考资料: