最近在学习Elasticsearch,首先是通过docker运行es单节点,然后通过curl发送http请求来实现增删改查等操作。
近期看了阮一鸣老师讲的《Elasticsearch核心技术与实战》中,通过docker-compose来运行Elasticsearch集群+kibana+cerebro,此处记录一下,有在学习es的同学可留言互相交流,谢谢。
es:分布式的搜索与分析引擎,提供了近实时的搜索和聚合功能
kibana:提供了丰富的可视化展现与分析功能,此处主要用到Dev Tools开发工具来代替curl操作es
cerebro:可视化的监控es集群相关信息
实现步骤:
1、首先创建docker-compose.yml文件
version: '3.0' #一共三个版本,1.x、2.x、3.x,目前主流是3.x
services:
# sign node
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
container_name: es761
environment:
- cluster.name=yxes
- node.name=es761
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es761
- network.publish_host=elasticsearch #对外的名称
- cluster.initial_master_nodes=es761
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /Users/admin/home/docker/mapping/esstack/es/es761/data:/usr/share/elasticsearch/data
- /Users/admin/home/docker/mapping/esstack/es/es761/plugins:/usr/share/elasticsearch/plugins
ports:
- 9200:9200
- 9300:9300
networks:
- es761net
# multi node
# elasticsearch:
# image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
# container_name: es761_01
# environment:
# - cluster.name=yxes
# - node.name=es761_01
# - bootstrap.memory_lock=true
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - discovery.seed_hosts=es761_01,es761_02
# - network.publish_host=elasticsearch
# - cluster.initial_master_nodes=es761_01,es761_02
# ulimits:
# memlock:
# soft: -1
# hard: -1
# volumes:
# - /Users/admin/home/docker/mapping/esstack/es/es761_01:/usr/share/elasticsearch/data
# ports:
# - 9200:9200
# networks:
# - es761net
# elasticsearch2:
# image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
# container_name: es761_02
# environment:
# - cluster.name=yxes
# - node.name=es761_02
# - bootstrap.memory_lock=true
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - discovery.seed_hosts=es761_01,es761_02
# - network.publish_host=elasticsearch
# - cluster.initial_master_nodes=es761_01,es761_02
# ulimits:
# memlock:
# soft: -1
# hard: -1
# volumes:
# - /Users/admin/home/docker/mapping/esstack/es/es761_02:/usr/share/elasticsearch/data
# networks:
# - es761net
cerebro:
image: lmenezes/cerebro:0.8.5
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://elasticsearch:9200
networks:
- es761net
kibana:
image: docker.elastic.co/kibana/kibana:7.6.1
container_name: kibana761
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- es761net
networks:
es761net:
driver: bridge
由于本子内存问题,这里就不启动多个es节点,只启动一个。
简单说明下yml文件中的组成:
a)networks是创建一个网络,然后将es、kibana、cerebro都加入同一个网络,这样在docker中他们网络就互通了。
b)指定的image,在docker中必须先pull对一个tag的image(已有可以忽略这一步)。
c)volumes,是宿主机目录与docker容器中目录映射,这样在本地文件夹中操作文件,容器中也跟着变化。
注意:如果docker容器目录中存在文件,目录又要做映射的话,需要先将文件copy出来,具体命令是:
docker cp container_id:/dockerfilepath/config/ /localfilepath/config/
2、运行准备好的docker-compose.yml文件
有两种方式:
a)进入到docker-compose.yml同级目录运行:docker-compose docker-compose.yml up -d
b)任务目录运行:docker-compose -f /Users/admin/Desktop/docker-compose-es.yml up -d
-d的意思表示在后台运行,控制台不输出日志。
docker-compose命令:
docker-compose up 启动容器、执行该命令需在同级目录
docker-compose down 停止容器
docker-compose down -v 停止容器并移除数据
docker-compose -f xxx/docker-compose.yml up -d 后台启动容器,-f指定docker-compose文件路径
执行完docker-compose up命令后,就可以通过docker ps查看已经运行的容器:
如果没有看到容器,表示启动失败,可以在启动的时候不加-d命令,则可以看到启动信息,方便排查错误。
三个都运行成功后的界面如下:
es:9200端口
cerebro:9000端口
kibana:5601端口