最近在学习elasticsearch分布式搜索引擎,因为看它需要搭建的东西比较多,就萌生了使用docker-compose去自动搭建单机环境的想法,毕竟不会偷懒的程序猿不是好程序猿,哈哈哈。
下面进入正题,新建一个docker-compose.yml文件,如下。
#author zev.zhang
version: "3.5"
services:
elasticsearch-1:
image: elasticsearch:6.4.3
ports:
- "9200:9200"
container_name: elasticsearch-1
networks:
envdm:
aliases:
- elasticsearch
kibana:
image: kibana:6.4.3
ports:
- "5601:5601"
container_name: kibana
#挂载文件
volumes:
- /Users/zhangweijie/Desktop/docker-compose/elk/kibana.yml:/etc/kibana/kibana.yml
networks:
envdm:
aliases:
- kibana
logstash:
image: logstash:6.4.3
container_name: logstash
- /Users/zhangweijie/Desktop/docker-compose/elk/logstash.conf:/etc/logstash/conf.d/logstash.conf
- /Users/zhangweijie/Desktop/docker-compose/elk/logstash.yml:/etc/logstash/logstash.yml
- /Users/zhangweijie/Desktop/docker-compose/elk/1.txt:/etc/logstash/1.txt
networks:
envdm:
aliases:
- logstash
networks:
envdm:
name: envdm
driver: bridge
配置使用docker的网桥模式来保证容器间网络的畅通。并且根据yml中配置的文件挂载路径来新建需要映射到docker容器中的配置文件,修改下方配置文件中绑定的IP地址,地址即为docker-compose.yml中配置的aliases别名。
- kibana.yml
elasticsearch.url: "http://elasticsearch:9200"
server.host: "0.0.0.0"
- logstash.yml
path.config: /etc/logstash/conf.d
- logstash.conf
input {
file {
path => "/etc/logstash/1.txt" #读取的配置路径,是容器的路径,需要挂载
type => "docker-logstash"
start_position => "beginning" #从文件开始处读写
}
}
output{
elasticsearch{
hosts=>["elasticsearch:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug}
}
至此,docker-compose.yml及需要映射的配置文件全部编写完毕,在yml文件所在的目录下运行docker命令 docker-compose up -d,容器构建完毕。
访问localhost:9200,如果返回elasticsearch的json信息,表示安装成功。
访问localhost:5601,请求kibana页面。
附:
在拉取elasticsearch官方镜像时,发现在国内不是一般的卡,我采用的方法是配置DaoCloud镜像站,如下。