【问题标题】:Statically configure a microservice to run on a specific machine静态配置微服务以在特定机器上运行
【发布时间】:2019-07-29 02:21:33
【问题描述】:

我使用 docker-compose 的 Moleculer 框架创建了 4 个微服务。如何静态配置每个微服务在特定机器上运行。

【问题讨论】:

  • 您目前如何将它们部署到不同的机器上? Swarm 模式、经典 swarm、kubernetes?
  • 我还不能将它们部署到不同的机器上。我只是使用 docker-compose 在单个主机上运行它们。
  • @KellMaresh 你检查过我下面的更新答案了吗?
  • 使用 docker-compose,一切都在一台机器上运行,所以我不明白您要解决的问题。
  • @MostafaHussein 我不确定开放式问题是否适合该网站。 OP 应该指定他们想要配置的编排工具,并询问如何配置该特定工具。使用指定的当前工具,他们已经在特定节点上运行容器,并且在不可预测的节点上运行容器时应该不会遇到任何问题。总体而言,该请求是容器的反模式,因为它降低了 HA。

标签: docker docker-compose microservices moleculer


【解决方案1】:

您可能想要使用docker swarm,它有一个功能允许您在称为Constraints的特定节点上部署容器

节点:docker 节点是指 swarm 模式集群中的成员。每个 swarm 节点必须是一个 docker 主机,来源:What is the difference between docker host and node?

约束可以被视为节点标签,它们是与特定节点关联的键/值对。

每个节点默认有以下约束:

  • node.id
  • node.hostname
  • node.role

服务可以如下部署:

docker service create --name backendapp --constraint 'node.hostname == web.example.com'

请注意,您可以使用 docker-compose.yml 部署到 swarm:

deploy 命令支持 compose 文件 3.0 及以上版本。

docker stack deploy --compose-file docker-compose.yml mystack

您也可以在docker-compose 中设置约束,类似于以下示例:

version: '3.3'
services:
  web:
    image: backendapp-image
    deploy:
      placement:
        constraints:
          - node.hostname == web.example.com

你可以通过here开始使用docker swarm

【讨论】:

  • 非常感谢您的回答,但从外观上看,调度程序过滤器将允许我选择特定类型的节点而不是特定主机来运行服务。
  • 它是一个主机,我已经更新了我的答案,这是否足够清楚?或者你需要更多解释?
  • 可用的过滤器有:健康、端口、依赖、亲和和约束。这些都不允许我为特定服务指定特定主机。他们将允许我为给定的服务选择特定类型的主机。
  • 非常感谢。这确实对我有很大帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 2012-01-02
  • 2017-07-06
  • 1970-01-01
  • 2011-09-07
  • 2011-02-05
相关资源
最近更新 更多