type
Post
status
Published
date
Oct 30, 2021
slug
build-search-system-part-four-es-kibana-on-docker
summary
以前我都是用 brew 安装开发环境。自从习惯用 Docker 以后,不得不承认用 Docker 打包这类服务还是更加方便的。只需注意一下容器之间的网络设置就可以了。
tags
Elasticsearch
Kibana
Docker
category
技术分享
icon
password
Property
Jan 1, 2023 12:00 PM

Docker 安装 Elasticsearch

elastic 官方提供了打包好的镜像,我们只需指定特定的参数,就可以一键启动了。一般来说,运行一个容器需要指定名称,端口号等,同时,本地的 ES 服务都是单节点的,因此:
  • --name es 指定容器名为 kibana
  • -p 9200:9200 映射容器的 5601 端口到本地的 5601 端口
  • -e "discovery.type=single-node" 设置环境变量discovery.type境 指定 ES 为单节点模式启动
也就是:
docker run --name "es" -p 9200:9200 -e "discovery.type=single-node" -t docker.elastic.co/elasticsearch/elasticsearch:8.5.3

Docker 安装 Kibana

安装 Kibana 需要注意的是它需要和 ES 版本号保持一致,并且指定 ES 的地址才能正常启动,所以在启动的时候指定如下几个参数:
  • --name kibana 指定容器名为 kibana
  • -p 5601:5601 映射容器的 5601 端口到本地的 5601 端口
  • -e "elasticsearch.hosts=http://es:9200" 设置环境变量,host为 ES 的容器名:端口号
也就是:
docker run --name kibana -p 5601:5601 -e "elasticsearch.hosts=http://es:9200" -t -d docker.elastic.co/kibana/kibana:8.5.3
这样一个 Kibana 容器也运行起来了。

网络准备

Docker 容器之间通信有好几种模式,具体看这篇:
而对我们日常应用来说,通过自定义网桥的方式,外界隔离,内部互通 是最理想的效果了。
创建自定义网桥:
docker network create es-kibana
再把上诉两个容器加入到这个网络中:
docker network connect elastic es docker network connect elastic kibana
这样两个容器都属于同一个网络下了。

连接配置

本来美滋滋的在浏览器地址输入 127.0.0.1:5601 ,以为能直接进入时,结果发现它需要输入 token:
notion image
根据提示,进入 ES 容器内部:(注意是 ES,不是 Kibana)
docker exec -it <容器ID> bash
在容器内部执行:
bin/elasticsearch-create-enrollment-token --scope kibana
执行以后会得到一串 token,粘贴到 Kibana 的文本框中,回车:
notion image
这次再根据提示,进入 Kibana 容器,执行:
bin/kibana-verification-code
得到一个类似两步验证的6位数字,输入。
notion image
输入数字以后进入了登录页面,我们需要账号密码才能访问 ES,ES 的内置用户是 elastic,我们进入 ES 容器,重置密码:
elasticsearch-reset-password --username elastic -i
后面就使用elastic账户和密码登录kibana。
 
又又改了一下博客架构Elasticsearch 实际应用(二)索引设计和管理

杂鱼
杂鱼
菜鸟程序员