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;