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.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:挂载数据目录实现持久化

  1. 安全配置(必做!)
    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  # 交互式修改
  1. 集群部署(多节点)
    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:首次启动时选举的主节点列表

  1. 验证部署
    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
  }
}'
  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和认证信息
  2. 常用管理命令
    `asp

查看日志:docker logs elasticsearch
停止容器:docker stop elasticsearch
删除容器:docker rm -f elasticsearch

`
备份数据:通过_snapshot API或直接复制数据目录
通过以上步骤,可实现Elasticsearch的单节点或集群部署。如需更复杂的配置(如自定义分片策略、IK分词器插件),需基于官方镜像构建自定义镜像。

文档更新时间: 2025-11-02 14:31   作者:admin