https://hub.docker.com/_/elasticsearch
docker pull elasticsearch:9.2.0
docker pull elasticsearch:8.19.5
docker pull elasticsearch:7.17.29

在Docker中部署Elasticsearch需要关注内存配置、集群搭建、持久化存储等关键点,以下是详细步骤和最佳实践:
- 基础部署(单节点)
1.1 拉取官方镜像`asp
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0 # 推荐指定版本
1.2 创建数据目录
```asp
bash
mkdir -p /data/elasticsearch/data
chmod 777 /data/elasticsearch/data # 确保容器有写入权限1.3 运行单节点容器
bash
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \ # 单节点模式
-e "xpack.security.enabled=true" \ # 启用安全认证(默认)
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \ # 限制JVM堆内存(生产环境建议4-16G)
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
--restart=always \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
关键参数说明:
-p 9200:9200:HTTP API端口
-p 9300:9300:节点间通信端口(集群时需要)
-e “discovery.type=single-node”:禁用集群发现,单节点模式
-e “ES_JAVA_OPTS”:设置JVM内存(避免内存不足导致OOM)
-v:挂载数据目录实现持久化
- 安全配置(必做!)
2.1 获取自动生成的密码
Elasticsearch 8.x默认启用安全认证,首次启动后需获取密码:
bash
docker logs elasticsearch 2>&1 | grep "password for the elastic user"
输出示例:
PASSWORD elastic = ABC123xyz... # 保存此密码
2.2 修改密码(可选)
进入容器修改默认密码:
bash
docker exec -it elasticsearch bash
bin/elasticsearch-reset-password -u elastic -i # 交互式修改
- 集群部署(多节点)
3.1 创建自定义网络`asp
bash
docker network create elastic-net
3.2 启动多个节点
节点1(主节点):
```asp
bash
docker run -d \
--name elasticsearch-node1 \
--net elastic-net \
-p 9200:9200 \
-e "cluster.name=my-es-cluster" \
-e "node.name=node1" \
-e "discovery.seed_hosts=elasticsearch-node1,elasticsearch-node2" \
-e "cluster.initial_master_nodes=node1" \
-e "xpack.security.enabled=true" \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
-v /data/es-node1/data:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0节点2(数据节点):
bash
docker run -d \
--name elasticsearch-node2 \
--net elastic-net \
-p 9201:9200 \
-e "cluster.name=my-es-cluster" \
-e "node.name=node2" \
-e "discovery.seed_hosts=elasticsearch-node1,elasticsearch-node2" \
-e "cluster.initial_master_nodes=node1" \
-e "xpack.security.enabled=true" \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
-v /data/es-node2/data:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
关键配置:
cluster.name:所有节点必须一致
discovery.seed_hosts:列出集群中所有节点的主机名或IP
cluster.initial_master_nodes:首次启动时选举的主节点列表
- 验证部署
4.1 检查集群状态
bash
curl -XGET "http://localhost:9200/_cluster/health?pretty" -u elastic:ABC123xyz...
返回示例:
json
{
"cluster_name" : "my-es-cluster",
"status" : "green", # green表示健康
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"unassigned_shards" : 0
}
4.2 测试索引创建
bash
curl -XPUT "http://localhost:9200/test-index" -u elastic:ABC123xyz... -H "Content-Type: application/json" -d'
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}'
- 关键注意事项
内存配置:
生产环境建议每个节点至少分配4GB内存(-Xms4g -Xmx4g)
避免物理机内存不足导致OOM
持久化存储:
必须挂载数据目录(/usr/share/elasticsearch/data),否则容器重启后数据丢失
安全加固:
启用TLS加密(需配置证书)
限制API访问IP(通过防火墙或Nginx反向代理)
生产环境优化:
调整index.number_of_shards和index.number_of_replicas
配置path.repo实现快照备份(需挂载额外目录)
Kibana集成:
部署Kibana时需配置ELASTICSEARCH_HOSTS和认证信息 - 常用管理命令
`asp
查看日志:docker logs elasticsearch
停止容器:docker stop elasticsearch
删除容器:docker rm -f elasticsearch
`
备份数据:通过_snapshot API或直接复制数据目录
通过以上步骤,可实现Elasticsearch的单节点或集群部署。如需更复杂的配置(如自定义分片策略、IK分词器插件),需基于官方镜像构建自定义镜像。