最近要实现个简单的IM系统,打算用ES做全文检索以及历史消息存储,复习下ES的安装以及使用。
因为网络问题,官网镜像拉不到,找个合适版本的镜像并安装。
网址:https://docker.aityp.com/r/docker.io/library/elasticsearch
拉ES镜像:
展开代码docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.19.5 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:8.19.5 elasticsearch:8.19.5
拉Kibana镜像
展开代码docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/kibana:8.19.5 docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/kibana:8.19.5 kibana:8.19.5
下载ik分词器的插件包(ik分词器处理中文全文检索效果最好)并解压好
https://release.infinilabs.com/analysis-ik/stable/
先修改配置文件
展开代码echo "vm.max_map_count=262144" >> /etc/sysctl.conf sysctl -p
找个目录创建docker-compose.yml、es-logs、es-data、kibana-config
展开代码version: '3.8' services: elasticsearch: # 构建自定义镜像(代替直接拉取官方镜像) build: . # 表示使用当前目录的 Dockerfile 构建 container_name: es8 restart: always ports: - "9200:9200" - "9300:9300" environment: - discovery.type=single-node - cluster.name=es-cluster #开启权限验证 - xpack.security.enabled=true - xpack.security.http.ssl.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m volumes: - ./es-data:/usr/share/elasticsearch/data - ./es-logs:/usr/share/elasticsearch/logs networks: - es-network # 可选:同时启动 Kibana(版本和 ES 一致) kibana: # Kibana 版本必须和 ES 完全一致! image: kibana:8.19.5 container_name: kibana8 restart: always # 端口映射:5601 是 Kibana 默认端口 ports: - "5601:5601" environment: # 配置 ES 地址(关键:填 ES 容器名/宿主机IP) - ELASTICSEARCH_HOSTS=http://es8:9200 # 若 ES 容器名不是 es8,改为实际名称;也可填宿主机IP:http://192.168.1.100:9200 # 中文界面(可选) - I18N_LOCALE=zh-CN # 优化响应超时(避免ES查询慢导致Kibana超时) - ELASTICSEARCH_REQUEST_TIMEOUT=30000 # 挂载配置文件(可选,如需自定义更多配置) volumes: - ./kibana-config:/usr/share/kibana/config # 加入 ES 所在的自定义网络(关键:保证容器互通) networks: - es-network # 这个网络名要和 ES 的 docker-compose 中的网络名一致 networks: es-network: driver: bridge ipam: config: - subnet: 172.16.0.0/16 gateway: 172.16.0.1 volumes: es-data: es-logs:
要注意的点是自定义网络那里,不要和内网已有网段冲突了。
kibana-config目录创建好kibana配置文件kibana.yml
展开代码server.port: 5601 server.host: "0.0.0.0" # 允许外部访问 elasticsearch.hosts: ["http://es8:9200"] # ES地址 #i18n.locale: "zh-CN" # 中文界面 elasticsearch.requestTimeout: 30000 elasticsearch.username: kibana_system elasticsearch.password: 123456 # 加密密钥(解决加密报错,必须配置) xpack.encryptedSavedObjects.encryptionKey: "abcdefghijklmnopqrstuvwxyz1234567890abcd"
根目录创建好DockerFile,用于自定义容器
展开代码FROM elasticsearch:8.19.5 COPY ik /usr/share/elasticsearch/plugins/analysis-ik # 验证是否复制成功 RUN ls -la /usr/share/elasticsearch/plugins/analysis-ik/ # 暴露端口(和基础镜像一致) EXPOSE 9200 9300 # 启动命令(和基础镜像一致) CMD ["elasticsearch"]
最终目录结构如下:

启动
docker compose up -d
停止
docker compose stop
重启
docker compose restart
查看 ES 日志
docker compose logs -f elasticsearch
删除 ES 容器(保留数据卷)
docker compose down
删除容器 + 数据卷(谨慎操作,数据会丢失)
docker compose down -v
启动后执行
curl http://localhost:9200
如果打印如下内容则成功:
展开代码{ "name" : "es-node-1", "cluster_name" : "es-cluster", "cluster_uuid" : "e4dBYZOXSvOWi_KOJ_s4iw", "version" : { "number" : "8.13.4", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "da95df118650b55a500dcc181889ac35c6d8da7c", "build_date" : "2024-05-06T22:04:45.107454559Z", "build_snapshot" : false, "lucene_version" : "9.10.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }
进入es容器创建用户,先给默认用户添加密码,这个后续登录用:
展开代码docker exec -it es8 bash ./bin/elasticsearch-reset-password -u elastic -i
kibana默认配置的不能用默认用户,所以创建个新用户给kibana用
展开代码docker exec -it es8 bash ./bin/elasticsearch-reset-password -u kibana_system -i
重启kibana容器即可
Kibana 是ELK 技术栈里的可视化工具,专门用来和 Elasticsearch 配合,做日志、指标、数据的查询、展示、分析、监控。访问http://localhost:5601 即可使用kibanna。
先确定几个概念:
进入kibana界面创建索引

创建好之后,进行相关映射的配置,可以使用控制台更方便。


例如我的消息的表创建索引命令为;
展开代码PUT /im_message/_mapping?pretty { "properties": { "sender_code": { "type": "keyword" }, "receiver_code": { "type": "keyword" }, "content": { "type": "text", "analyzer": "ik_max_word" }, "message_time": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, "read_status": { "type": "integer" }, "code": { "type": "keyword" } } }
本文作者:刘涛
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!