简述
这里我们使用docker-compose快速搭建:cerebro+kibana+2节点elasticsearch
并在最后附上我搭建过程中遇到的问题。可供参考。
docker-compose.yaml 配置文件
cerebro+kibana+2节点elasticsearch
[root@localhost bin]# touch docker-compose.yaml
[root@localhost bin]# vi docker-compose.yaml
version: '2.2'
services:
cerebro:
image: lmenezes/cerebro:0.8.3
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://es7_01:9200
networks:
- es7net
kibana:
image: docker.io/kibana:7.1.0
container_name: kibana7
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- es7net
elasticsearch:
image: docker.io/elasticsearch:7.3.2
container_name: es7_01
environment:
- cluster.name=geektime
- node.name=es7_01
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01,es7_02
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- es7net
elasticsearch2:
image: docker.io/elasticsearch:7.3.2
container_name: es7_02
environment:
- cluster.name=geektime
- node.name=es7_02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01,es7_02
- cluster.initial_master_nodes=es7_01,es7_02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data2:/usr/share/elasticsearch/data
networks:
- es7net
volumes:
es7data1:
driver: local
es7data2:
driver: local
networks:
es7net:
driver: bridge
[root@localhost bin]#
启动容器
[root@localhost bin]# ll
-rw-r--r--. 1 root root 1600 9月 24 17:18 docker-compose.yaml
[root@localhost bin]# docker-compose up > log.txt
Starting es7_01 ... done
Starting cerebro ... done
Starting kibana7 ... done
Starting es7_02 ... done
如果启动成功,会显示以上内容,并把启动日志保存到当前目录的log.txt中。(注意:这里不要使用ctrl+c退出窗口,否则容器都会stop,新开一个命令行窗口)
在另一个命令行窗口查看运行状态:
[root@localhost bin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ea1ee424001 docker.io/elasticsearch:7.3.2 "/usr/local/bin/do..." 22 minutes ago Up 12 minutes 9200/tcp, 9300/tcp es7_02
3704143fe6cd docker.io/kibana:7.1.0 "/usr/local/bin/ki..." 22 minutes ago Up 12 minutes 0.0.0.0:5601->5601/tcp kibana7
5ce37aebf865 lmenezes/cerebro:0.8.3 "/opt/cerebro/bin/..." 22 minutes ago Up 12 minutes 0.0.0.0:9000->9000/tcp cerebro
5f046e5a2a52 docker.io/elasticsearch:7.3.2 "/usr/local/bin/do..." 22 minutes ago Up 12 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp es7_01 ##容器名称
检查es运行状态:
[root@localhost bin]# curl http://localhost:9200
{
"name" : "es7_01",
"cluster_name" : "geektime",
"cluster_uuid" : "vjTBSm4NT3yZoshs2OFbBA",
"version" : {
"number" : "7.3.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "1c1faf1",
"build_date" : "2019-09-06T14:40:30.409026Z",
"build_snapshot" : false,
"lucene_version" : "8.1.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
es7_01容器中运行Elasticsearch端口为9200。由于我们在docker-compose.yaml中,把es7_01容器中的9200端口映射到本机的9200端口上。
所以上面我们使用curl http://localhost:9200可以访问到Elasticsearch服务。
使用cerebro访问Elasticsearch
cerebro是Elasticsearch的可视化客户端,使用docker ps 我们能看到cerebro端口为:9000
[root@localhost bin]# docker ps | grep cerebro
5ce37aebf865 lmenezes/cerebro:0.8.3 "/opt/cerebro/bin/..." 30 minutes ago Up 20 minutes 0.0.0.0:9000->9000/tcp cerebro
访问http://localhost:9000
点击进来之后,我看到的是:
查看当前docker服务器ip和容器中对外暴露端口 的工具
说明:这个对于搭建Elasticsearch不是必须的。
我的使用场景是:由于我是window电脑,我在vm ware虚拟机中安装了centos mini系统,并在此centos系统中安装了docker。
由于centos是最简版的——没有图形界面,没有浏览器。所以我使用以下工具——dockerhostip.sh,来快速查看centos虚拟机的当前ip和docker端口号。
以便我能快速复制出来虚拟机的ip和docker容器的端口,快速在window浏览器上访问。
[root@localhost bin]# touch dockerhostip.sh
[root@localhost bin]# vi dockerhostip.sh
echo '============================================='
echo '当前centos虚拟机ip:'
hostname -I | awk -F ' ' '{print $1}'
echo ''
count=`docker ps -q | wc -l`
if [ $count -gt '0' ];then
docker ps --format='{{.Names}} {{.Ports}}' | sed -s "s/0.0.0.0/`hostname -I | awk -F ' ' '{print $1}'`/g"
else
echo 'No container is running....'
fi
echo '============================================='
[root@localhost bin]# chmod +x dockerhostip.sh
## 运行dockerhostip.sh查看输出:
[root@localhost bin]# dockerhostip.sh
=============================================
当前ip:
192.168.xxx.xxx ##这里是备注:这里使用xxx.xxx来脱敏ip了。
es7_02 9200/tcp, 9300/tcp
kibana7 192.168.xxx.xxx:5601->5601/tcp
cerebro 192.168.xxx.xxx:9000->9000/tcp
es7_01 192.168.xxx.xxx:9200->9200/tcp, 9300/tcp
=============================================
这里我直接在window浏览器中输入http://192.168.xxx.xxx:9000就能直接访问cerebro了。
报错及解决
一、docker-compose up -d 启动时报错:
exec: "docker-proxy": executable file not found in $PATH
解决:https://www.cnblogs.com/cxbhakim/p/9149596.html
解决之后,再次使用docker-compose up -d 报错:
failed: port is already allocated
原因:docker-proxy报错时,此时端口号已经分配了,所以这里要重新启动一下docker服务器。重启后,ok
二、[36mes7_01 |[0m [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
启动一会之后,查看docker ps 发现es的容器都停止了。
查看日志发现报错信息:
[36mes7_01 |[0m [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改:修改方案参考
查看当前vm.max_map_count 配置:
grep vm.max_map_count /etc/sysctl.conf
修改配置:
sysctl -w vm.max_map_count=262144
重新启动容器:
docker-compose up
一段时间后,查看es,仍在运行。
閱讀更多 GT七妖妖 的文章