【问题标题】:How to run same container on all Docker Swarm nodes如何在所有 Docker Swarm 节点上运行相同的容器
【发布时间】:2016-08-24 13:49:14
【问题描述】:

我刚刚开始接触 Docker Swarm,因为我们正在寻找配置我们的计算集群以使其更加容器化的方法。 基本上,我们有一个由 16 台计算机组成的小型农场,我希望能够让每个节点都下载相同的映像,运行相同的容器,并接受来自在主节点上运行的 OpenMPI 程序的作业。

OpenMPI 对此没有什么特别的,只是容器必须能够打开 SSH 端口,并且主服务器必须能够登录到它们。我已经使用单个 Docker 容器进行了此操作,并且可以正常工作。

现在我正在学习 Docker Machine 和 Docker Swarm 作为管理 16 个节点的一种方式。据我所知,一旦我设置了一个 swarm,我可以将其设置为 DOCKER_HOST(或使用 -H)来发送“docker run”,然后 swarm 管理器将决定哪个节点运行请求的容器。我基本上是使用一个简单的节点列表而不是搞乱发现服务来完成这个工作,到目前为止一切都很好。

但我实际上想在一个命令中在所有节点上运行 same 容器。这可能吗?

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

    Docker 1.12 引入了全局服务并传递--mode global 运行命令 Docker 将服务调度到所有节点。

    使用 Docker Swarm,您可以使用标签和负亲和过滤器来获得相同的结果:

    openmpi:
      environment:
        - "affinity:container!=*openmpi*"
      labels:
        - "com.myself.name=openmpi"
    

    【讨论】:

    • 还可以使用Kontena 将服务的部署策略定义为“守护进程”。然后它将被部署到每个节点。当所有新节点加入集群时,它也会自动部署到它们。
    • 是 docker-compose 文件中的示例吗?我认为 swarm 模式不适用于 compose
    • 所以,如果我理解正确,亲和过滤器是 only 谓词,用于针对每个节点来决定容器是否运行?因此,这意味着,对于每个节点,“如果我没有运行名为 openmpi 的东西,请运行 openmpi 并为其指定标签 name=openmpi”。对吗?
    • @dov.amir 我也想知道。但是,我相信如果它不适用于 compose,仍然可以将这些过滤器指定为命令行选项?
    • 是的,--mode 选项不适用于 compose。后一个示例来自 docker-compose 文件。 @Steve 的假设是正确的。当然这些过滤器也可以指定为命令行选项docker run --label="com.myself.name=openmpi" -e "affinity:container!=*openmpi*" ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多