Docker Deployment Elasticsearch 8.x Complete Guide Preface Elast
Docker Deployment of Elasticsearch 8.x
Published: 2025-10-14 (9 months ago)
GOES

Docker 部署 Elasticsearch 8.x 完整指南

前言

Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于日志分析、全文搜索、数据可视化等场景。本文将详细介绍如何使用 Docker 部署 Elasticsearch 8.x,并配置中文分词插件。

环境准备

  • Docker 已安装
  • 服务器内存建议 4GB 以上
  • 确保防火墙开放 9200 和 9300 端口

基础部署

1. 拉取官方镜像

bash Copy
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.16.0

2. 创建并启动容器

bash Copy
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 Copy
curl -u elastic:your_password_here http://your_server_ip:9200/

成功响应示例:

json Copy
{
  "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 SSL
  • xpack.security.transport.ssl.enabled=false: 禁用传输层 SSL
  • ELASTIC_PASSWORD: 设置 elastic 用户密码

为什么禁用 SSL?

在开发环境中禁用 SSL 可以:

  • 简化客户端连接配置
  • 避免证书管理复杂性
  • 提高开发效率

注意:生产环境建议启用 SSL 确保安全性

安装中文分词插件

方法一:版本匹配安装

bash Copy
# 停止并删除现有容器
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 Copy
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 Copy
docker-compose up -d

验证 IK 分词插件

bash Copy
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 Copy
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 Copy
{
  "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 Copy
# 设置 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 Copy
# 设置数据目录权限
sudo chown -R 1000:1000 /path/to/es/data

性能优化

1. 系统配置

bash Copy
# 增加虚拟内存
echo 'vm.max_map_count=262144' >> /etc/sysctl.conf
sysctl -p

2. 容器资源限制

bash Copy
docker run -d \
  --name elasticsearch \
  --memory="2g" \
  --cpus="2.0" \
  # ... 其他参数

监控和维护

查看集群状态

bash Copy
curl -u elastic:your_password_here http://your_server_ip:9200/_cluster/health

查看索引信息

bash Copy
curl -u elastic:your_password_here http://your_server_ip:9200/_cat/indices

日志查看

bash Copy
docker logs elasticsearch

总结

通过 Docker 部署 Elasticsearch 可以快速搭建搜索服务,配合 IK 分词插件能够很好地支持中文搜索。在实际使用中,需要根据业务需求调整配置参数,确保系统稳定运行。

记住在生产环境中:

  • 启用 SSL 加密
  • 设置强密码
  • 配置防火墙规则
  • 定期备份数据
  • 监控系统性能

希望这篇文章能帮助你快速上手 Elasticsearch 的部署和配置!