Docker 安装 ElasticSearch + Head + Kibana

O、前言

今天周末在家学习一下 ElasticSearch 。需要安装 ES、Head 和 Kibana 来做基础查询操作的熟悉。出于练习一下 Docker 的原因,环境安装都用了 Docker。把安装步骤和过程中的一些采坑记录一下。

一、拉取镜像

# 拉取 ElasticSearch镜像
docker pull elasticsearch:7.6.1
# 拉取 Head 镜像
docker pull mobz/elasticsearch-head:5
# 拉取 Kibana 镜像
docker pull kibana:7.6.1

二、启动容器

1、启动 ElasticSearch 容器

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d --name elasticsearch  -p 9200:9200 -p 9300:9300 elasticsearch:7.6.1

在启动 ElasticSearch 容器几秒后,容器自动退出了。docker ps -a 发现 ElasticSearch 容器状态为Exited (137)。

查看日志发现如下报错:

docker logs -f 635b290dacbf
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

需要加上参数-e "discovery.type=single-node",完整的命令为:

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d --name elasticsearch  -p 9200:9200 -p 9300:9300 elasticsearch:7.6.1

2、启动 head 容器

docker run -d -p 9100:9100 --name es_head docker.io/mobz/elasticsearch-head:5

浏览器访问 127.0.0.1:9100
这里可能会有跨域访问的问题

进入 ElasticSearch 容器内部,修改配置文件elasticsearch.yml

# 查询运行容器 elasticsearch 的 id
docker ps -a   
# 进入容器
docker exec -it ******(容器id) /bin/bash
# 进入config目录
cd ./config
# 编辑 elasticsearch.yml 文件
vim elasticsearch.yml

在elasticsearch.yml中添加如下内容

http.cors.enabled: true
http.cors.allow-origin: "*"

重启 ElasticSearch容器

docker restart elasticsearch

3、启动 kibana 容器

docker run -d -p 5601:5601 --name kibana --link elasticsearch:elasticsearch kibana:7.6.1

Kibana启动之后发现是全是英文,有些单词还是看不太懂,怎么办。不用担心,kibana 7.X已经为我们准备好了汉化选项。

中文包在 /usr/share/kibana/node_modules/x-pack/plugins/translations/translations/zh-CN.jso

只需要进入kibana容器,在配置文件 kibana.yml 中加入

i18n.locale: "zh-CN"

就可以了,汉化之后的效果如下图,这都能看懂了吧。

在这里插入图片描述

三、使用 Head 和 Kibana

1、head 无法显示数据问题
通过 Kibana 插入数据后,在head的数据预览页面发现数据没有加载出来,打开检查,发现前端报错406。
在这里插入图片描述

解决方案

进入head容器中,docker exec -it es_head /bin/bash

进入 _site 目录 cd _site/

编辑 vendor.js 共有两处

6886行 contentType: "application/x-www-form-urlencoded" 修改为 contentType: "application/json;charset=UTF-8"

7573行 var inspectData = s.contentType === "application/x-www-form-urlencoded" && 修改为 var inspectData = s.contentType === "application/json;charset=UTF-8" &&

保存退出,不需要重启容器

刷新浏览器,发现数据正确展示。

2、Head 容器中没有vim命令
apt-get install vim

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim

apt-get update

apt-get install vim

3、安装ik分词插件
将压缩包移动到容器中

docker cp elasticsearch-analysis-ik-7.6.1.zip elasticsearch:/usr/share/elasticsearch/plugins

进入容器

docker exec -it elasticsearch /bin/bash

创建目录

mkdir /usr/share/elasticsearch/plugins/ik

将文件压缩包移动到ik中

mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.6.1.zip /usr/share/elasticsearch/plugins/ik

进入目录

cd /usr/share/elasticsearch/plugins/ik

解压

unzip elasticsearch-analysis-ik-7.6.1.zip

删除压缩包

rm -rf elasticsearch-analysis-ik-7.6.1.zip

退出并重启镜像

exit
docker restart elasticsearch

四、总结

到此,就可以愉快的练习ES的基础操作了。

说实话,ES的的增删改查方法真的是多,不好好练习,结合实际需求,还真的不容易记住,灵活运用更是不容易。

### 使用 Docker 安装配置 Elasticsearch 教程 #### 准备工作 为了确保顺利安装并运行 Elasticsearch,需调整虚拟内存设置以及创建专用的 Docker 网络环境。具体操作如下: 通过命令 `sysctl -w vm.max_map_count=262144` 来提高系统的最大映射计数至推荐值 262144[^2]。 接着利用 `docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.0.1 esnet` 创建名为 `esnet` 的自定义桥接网络以便容器间通信。 #### 启动单节点实例 对于简单的测试场景,在本地启动一个独立的 Elasticsearch 实例非常便捷。这可以通过拉取官方镜像来实现: ```bash docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.1 ``` 随后使用下面这条指令快速启动服务,并将其绑定到主机端口上: ```bash docker run -d --name elasticsearch \ --net esnet \ -e "discovery.type=single-node" \ -p 9200:9200 \ -p 9300:9300 \ docker.elastic.co/elasticsearch/elasticsearch:7.10.1 ``` 上述命令中的 `-e "discovery.type=single-node"` 参数指定了该节点作为单一模式运作,适用于开发环境中;而两个暴露出来的端口中,前者供 REST API 访问,后者则是节点之间通讯所用。 #### 配置安全性和认证机制 (可选) 如果计划长期在线部署,则建议启用 X-Pack 提供的安全特性,包括但不限于用户验证、角色权限管理等功能。此时需要提前准备好 SSL/TLS 证书及相关密钥材料,并按照官方文档指引完成相应路径下的放置与引用。 #### 连接可视化工具 Kibana 或者第三方插件 为了让数据展示更加直观友好,可以考虑引入 Kibana 或其他图形界面组件辅助查看索引状态和查询日志记录等信息。例如,针对前面提到过的 `elasticsearch-head` 插件,可通过以下方式轻松集成: 停止旧版本(如果有): ```bash docker stop elasticHead && docker rm elasticHead ``` 启动新会话: ```bash docker run -d --name elasticHead \ --net esnet \ -p 9100:9100 \ mobz/elasticsearch-head:5 ``` 这里特别注意要保证两者处于同一网段内(`--net esnet`),从而允许它们相互发现和服务调用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值