方法:使用docker-compose
官网教程:https://www.elastic.co/guide/en/kibana/current/docker.html
有两种方法:
1.自己写dockerfile,build image,然后用docker run命令启动
2.编写dockercompose.yml文件,直接用docker-compose up的命令启动,推荐此种方法。
笔者最终使用的是dockercompose方法,虽然第一种方法有时也可以使用,但是由于OS是Win10,总是出现难以名状的错误。两种方法下面都会介绍,如果有问题欢迎指出。
1. 使用docker compose.
docker compose是docker的一个简化操作命令,只需要三步。
1)编写dockerfile,设置app的环境(由于此处使用的是官方docker镜像,所以这步可以省略)
2)编写dockercompose.yml,设置app的服务
3)运行docker-compose up命令,启动服务
使用docker compose运行kibana的步骤如下:
(1)编写dockercompose.yml文件
在一个路径下建立dockercompose.yml文件,写入如下内容
version: "3" #定义docker compose的版本
services:
kibanatest:
image: docker.elastic.co/kibana/kibana-oss:[version] #设置docker镜像,此处使用oss版,es上装了xpack的请去掉"-oss"
container_name: [custom container name] #自定义容器名称,随意
volumes: #这里列出更改或加入的文件,注意格式,这是一个数组
- ./plugins:/usr/share/kibana/plugins:rw #这里加入了一个plugin文件夹,将它里面的内容写入kibana/plugins文件夹下
environment:
ELASTICSEARCH_URL: [your elasticsearch url] #设置elasticsearch服务器url
OPS_INTERVAL: 60000
ports: #设置kibana端口,注意这是一个数组
- "5601:5601"
(2)cd [dockercompose.yml文件所在路径]
docker-compose up
(3)打开浏览器,访问localhost:5601,这时就会出现kibana界面
下面解释几个问题(我踩的坑):
(1)推荐使用官方镜像。开始我下的kibana源码,然后用npm start启动,不仅build的image比official docker image要大不少(官方镜像800多MB,自己build的1.31GB),而且自己写dockerfile经常会踩坑,而且资料也少。
(2) 为什么使用oss镜像。我使用的es服务器上没有装xpack,所以使用normal version就会报错:_xpack index doesn't exist in XXX(具体记不清了,类似的)。这是因为normal version的docker image默认你装了xpack,所以你即使按照网上的说法将XPACK_ML.enabled, XPACK_MONITORING....等标志位设置成false,依然会报错。如果在es上装了xpack,如有需要在enviroment下设置XPACK的环境变量。
参考资料:https://github.com/elastic/kibana-docker/issues/27
关于optimization问题的讨论:https://discuss.elastic.co/t/docker-docker-compose-custom-kibana/102129
(有用的东西到这里就结束了,下面的方法是半成品,跑出来的同志们欢迎提意见)
2. 编写dockerfile
dockerfile的参考链接:https://github.com/rigon/docker-kibana-dev
1)编写dockerfile,我把elasticsearch_url全都替换成了自己的es服务器地址
2)建立镜像:
cd [Dockerfile所在的路径]
docker build [custom image name] -t [custom image path(我这里直接写了一个".")]
3)跑起来:
docker run -e "ELASTICSEARCH_URL=[elasticsearch服务器地址]" [custom image name]
PS: 如果你在本地run的elasticsearch,不要把server address写成localhost:9200,这里需要建立network将二者连起来,或者设置--net = host。具体可以去google search(虽然我最终没跑出来┑( ̄Д  ̄)┍)
我用这种方法跑出来几回,但是大多数情况停在了optimization success in XXXs,访问localhost:5601也啥都不显示,但是log也不报错,奇哉怪哉。
PS:elastic论坛上有很多有用的资料,elastic的team member回答问题也很热情,有问题的筒子们可以参考一下。