【问题标题】:Is it possible to run ELK as a Docker service?是否可以将 ELK 作为 Docker 服务运行?
【发布时间】:2018-04-25 19:01:22
【问题描述】:

我是 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 个容器 - 1 个在 Master Swarm 上,另一个在 Worker 节点上。

【问题讨论】:

    标签: docker docker-swarm elastic-stack


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。您能否提供一个关于如何将每个服务作为容器启动的示例代码?但我对创建 Docker 服务很感兴趣
    • @Aswin 如果你真的想在单个容器中启动它们:hub.docker.com/r/sebp/elk/~/dockerfile
    • @Aswin 如果你想创建 3 个服务:botleg.com/stories/…
    • 我们使用的是 docker 1.12 版。我听说 docker-compose 仅​​在 1.13 之后才有效,请确认
    • @Aswin 我不知道。您可以尝试看看它是否有效。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多