docker swarm如何在指定节点运行service

来源:互联网 发布:淘宝的配送范围 编辑:程序博客网 时间:2024/05/23 20:14

Swarm环境中怎么指定某个容器在指定的宿主上运行呢? #

每个 Docker Host 建立时都可以通过 --label 指定其 Docker Daemon 的标签,比如:

$ docker daemon \
  --label com.example.environment="production" \
  --label com.example.storage="ssd"


  • 注意,上面的配置参数应该配置在 docker daemon 的配置文件里,如 docker.service,而不是简单的命令行执行……


如果是配置文件启动的需要这样写:(ubuntu)

DOCKER_OPTS="$DOCKER_OPTS --label com.example.environment='production' "


然后运行容器时,使用环境变量约束调度即可。可以使用 Compose 文件的 environment 配置,也可以使用 docker run 的 -e 环境变量参数。下面以 Compose 配置文件为例:

version: "2"
services:
 mongodb:
 image: mongo:latest
 environment:
 "constraint:com.example.storage==ssd"


这样这个 mongodb 的服务就会运行在标记为 com.example.storage="ssd" 的宿主上运行。


还可以在启动的时候使用 --constraint 参数进行限制,此方法效果比使用变量效果要好,经过试验变量效果会失效的现象太多,按照上述在 Dockerd 上配置 label 后启动服务的命令如:

$ docker service create --name xxx --constraint engine.labels.com.example.environment==production xxx

把其余参数补齐即可启动在使用这个 production 标签的节点上。

$ docker service create --name xxx --constraint node.hostname==swarm1 xxx

可以使用集群节点的名称来启动,省去了配置 label。

Main Reference: https://wiki.shileizcc.com/pages/viewpage.action?pageId=10911914;

https://blog.lab99.org/post/docker-2016-07-14-faq.html;

  docker原理: http://www.csdn.net/article/2015-08-21/2825511

原创粉丝点击