Docker Swarm mode(v1.12.x)的一些使用限制

Swarm modeDocker v1.12中正式发布,Swarm mode带来了诸如Docker集群,容器编排,多主机网络等激动人心的特性。V秘团队也尝试着将各种后台服务部署到Docker Swarm Cluster获取更好的弹性计算能力。

Docker v1.12中正式发布的Docker Swarm在我们实用中发现仍有不少不足之处,让我们一一分享给大家。

  1. 无法将服务的published端口只绑定到特点的网卡上。比如我们的云主机(同时也是Swarm manager/node)有eth0eth1两块网卡,分别连接内网和外网。我们计划在Docker Swarm中运行一个nginx服务,通过80/443端口提供HTTP/HTTPS服务。当我们希望将nginx中的Web服务暴露在云主机上时,我们通过以下命令创建nginx服务。然而我们无法选择将published的80端口绑定在哪个interface上。Docker Swarm会自动将服务监听到Swarm node的所有80端口上。如果我们只想将这个服务暴露在内网interface暂时无法实现。
    1docker service create --name vme-nginx --network vme-network --replicas 1 \
    2       --publish 80:80 --publish 443:443 \
    3       nginx:1.11
  2. 无法为Docker Swarm内运行的服务设置主机名。通过docker run命令执行的容器可以设置hostname。比如,
    1docker run --hostname vme-nginx nginx:1.11
    但是docker service create命令缺少等价的参数为容器指定hostname。一些依赖于hostname的服务将无法部署在Docker Swarm中,比如clustered rabbitmq。
  3. Docker compose还不能与Docker Swarm完美集成。目前有一个experimental的Docker Stacks and Distributed Application Bundles在尝试做更好的整合。
  4. docker service update有时不能更新正在运行中的container。更多讨论见这个issue