是否可以将ELK作为Docker服务运行?

时间:2018-03-30 03:08:15

标签: docker docker-swarm elastic-stack

我是Docker世界的新手,并试图在Docker上运行ElasticSearch堆栈。我可以将ELK作为容器启动,它可以很好地工作。

docker run -v /var/lib/docker/volumes/elk-data:/var/lib/elasticsearch \
-v /var/lib/docker/volumes/elk-data:/var/log/elasticsearch \
-p 5601:5601 -p 9200:9200  -p 5044:5044 \
--name elk sebp/elk

我正在使用journalbeat将指标转发到ElasticSearch服务并在Kibana中进行可视化。

我可以使用以下命令将journalbeat作为服务运行:

sudo docker service create --replicas 2 --mount type=bind,source=/opt/apps/shared/dev/docker/volumes/journalbeat/config/journalbeat.yml,target=/journalbeat.yml --mount type=bind,source=/run/log/journal,target=/run/log/journal --mount type=bind,source=/etc/machine-id,target=/etc/machine-id --constraint node.labels.nodename==devlabel --name journalbeat-svc mheese/journalbeat:v5.5.2

我们有办法将ELK作为服务运行吗?这样我们就可以启动2个容器 - 一个在Master Swarm上,另一个在工作节点上。

2 个答案:

答案 0 :(得分:2)

ELK表示Elasticsearch,Logstash和Kibana,因此必须运行3个服务。在Docker swarm中,一个服务有零个或多个实例,但每个实例都是一个基于相同Dockerfile的容器。

因此,为了将ELK作为服务运行,您必须在同一容器中启动Elasticsearch,Logstash和Kibana。虽然理论上可行,但不建议这样做( 每个容器应该是一个进程)。

相反,您应该创建3个服务,一个用于Elasticsearch,Logstash和Kibana。

答案 1 :(得分:2)

此处提供了将完整ELK堆栈作为单独的docker容器运行的示例:https://github.com/elastic/examples/tree/master/Miscellaneous/docker/full_stack_example

这使用docker-compose,因此您可以轻松地上下移动容器。