Docker 部署 Elasticsearch 8.x 完整指南
前言
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于日志分析、全文搜索、数据可视化等场景。本文将详细介绍如何使用 Docker 部署 Elasticsearch 8.x,并配置中文分词插件。
环境准备
- Docker 已安装
- 服务器内存建议 4GB 以上
- 确保防火墙开放 9200 和 9300 端口
基础部署
1. 拉取官方镜像
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.16.0
2. 创建并启动容器
bash
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=true" \
-e "xpack.security.http.ssl.enabled=false" \
-e "xpack.security.transport.ssl.enabled=false" \
-e "ELASTIC_PASSWORD=your_password_here" \
docker.elastic.co/elasticsearch/elasticsearch:8.16.0
3. 验证部署
bash
curl -u elastic:your_password_here http://your_server_ip:9200/
成功响应示例:
json
{
"name" : "container_id",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "uuid_string",
"version" : {
"number" : "8.16.0",
"build_flavor" : "default",
"build_type" : "docker"
},
"tagline" : "You Know, for Search"
}
配置说明
重要环境变量
discovery.type=single-node: 单节点模式xpack.security.enabled=true: 启用安全认证xpack.security.http.ssl.enabled=false: 禁用 HTTP SSLxpack.security.transport.ssl.enabled=false: 禁用传输层 SSLELASTIC_PASSWORD: 设置 elastic 用户密码
为什么禁用 SSL?
在开发环境中禁用 SSL 可以:
- 简化客户端连接配置
- 避免证书管理复杂性
- 提高开发效率
注意:生产环境建议启用 SSL 确保安全性
安装中文分词插件
方法一:版本匹配安装
bash
# 停止并删除现有容器
docker stop elasticsearch
docker rm elasticsearch
# 使用匹配版本的 Elasticsearch
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=true" \
-e "xpack.security.http.ssl.enabled=false" \
-e "xpack.security.transport.ssl.enabled=false" \
-e "ELASTIC_PASSWORD=your_password_here" \
docker.elastic.co/elasticsearch/elasticsearch:8.4.1
# 安装 IK 分词插件
docker exec -it elasticsearch ./bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
# 重启容器使插件生效
docker restart elasticsearch
方法二:使用 Docker Compose
创建 docker-compose.yml:
yaml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.1
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=false
- ELASTIC_PASSWORD=your_password_here
ports:
- "9200:9200"
- "9300:9300"
volumes:
- es_data:/usr/share/elasticsearch/data
command: >
bash -c "
./bin/elasticsearch-plugin install --batch https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1 &&
./bin/elasticsearch
"
volumes:
es_data:
启动:
bash
docker-compose up -d
验证 IK 分词插件
bash
curl -u elastic:your_password_here -X POST "http://your_server_ip:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"analyzer": "ik_max_word",
"text": "中华人民共和国"
}'
应用集成
Go 语言集成示例
go
package main
import (
"github.com/elastic/go-elasticsearch/v8"
)
func main() {
cfg := elasticsearch.Config{
Addresses: []string{
"http://your_server_ip:9200",
},
Username: "elastic",
Password: "your_password_here",
}
es, err := elasticsearch.NewClient(cfg)
if err != nil {
panic(err)
}
// 测试连接
res, err := es.Info()
if err != nil {
panic(err)
}
defer res.Body.Close()
}
索引映射配置
json
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"content": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
常见问题
1. 内存不足
bash
# 设置 JVM 堆内存
docker run -d \
--name elasticsearch \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
# ... 其他参数
2. 插件版本不匹配
确保 Elasticsearch 版本与 IK 插件版本匹配:
- ES 8.4.1 → IK 8.4.1
- ES 8.15.0 → IK 8.15.0
3. 权限问题
bash
# 设置数据目录权限
sudo chown -R 1000:1000 /path/to/es/data
性能优化
1. 系统配置
bash
# 增加虚拟内存
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
sysctl -p
2. 容器资源限制
bash
docker run -d \
--name elasticsearch \
--memory="2g" \
--cpus="2.0" \
# ... 其他参数
监控和维护
查看集群状态
bash
curl -u elastic:your_password_here http://your_server_ip:9200/_cluster/health
查看索引信息
bash
curl -u elastic:your_password_here http://your_server_ip:9200/_cat/indices
日志查看
bash
docker logs elasticsearch
总结
通过 Docker 部署 Elasticsearch 可以快速搭建搜索服务,配合 IK 分词插件能够很好地支持中文搜索。在实际使用中,需要根据业务需求调整配置参数,确保系统稳定运行。
记住在生产环境中:
- 启用 SSL 加密
- 设置强密码
- 配置防火墙规则
- 定期备份数据
- 监控系统性能
希望这篇文章能帮助你快速上手 Elasticsearch 的部署和配置!