是的,Elasticsearch (ES) 完全可以使用 Docker 部署,这实际上是生产环境中非常常见的做法。以下是关于 Docker 部署 Elasticsearch 的关键信息:
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类似,修改节点名称和端口映射
内存限制:ES 对内存敏感,建议通过 -e ES_JAVA_OPTS="-Xms1g -Xmx1g"
设置 JVM 堆大小
持久化存储:使用 volume 挂载数据目录
-v es_data:/usr/share/elasticsearch/data
安全配置:从 8.0 开始默认启用安全功能,首次运行会输出默认密码
性能调优:
-e "bootstrap.memory_lock=true"
推荐使用 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
docker logs <container_id>
-e "TAKE_FILE_OWNERSHIP=true"
使用 Docker 部署 Elasticsearch 可以大大简化部署和扩展过程,特别适合开发和测试环境,生产环境则需要更多性能和安全配置。