使用 docker swarm 来部署应用,可以极大的减少开发人员在环境配置方面的精力花费。还能从应用部署层面了解下分布式,解耦相关的知识。
至于就提的操作命令和步骤,现查官方文档就够用了。

基础信息

  1. 使用到的端口
  • 2377 (TCP) – 集群管理
  • 7946 (TCP 与 UDP) – 节点通信
  • 4789 (TCP 与 UDP) – overlay 网络

准备工作

  1. 创建3个节点,1个集群管理节点和2个工作节点
docker-machine create -d virtualbox manager1
docker-machine create -d virtualbox worker1
docker-machine create -d virtualbox worker2

查看结果 docker-machine ls

初始化

  1. 链接 manager1
    • docker-machine ssh worker1
    • 设置环境变量的方式 docker-machine env manager1
  2. 查看状态 docker-machine ls
  3. 创建 swarm docker swarm init –advertise-addr manager1IP
  4. 查看集群节点状态 docker node ls

添加和管理节点

  1. 连接 worker1 : docker-machine env worker1

  2. 加入 swarm : docker swarm join –token TOKEN manager1IP:2377

  3. 移除节点

    1. docker-machine env worker2
    2. docker swarm leave
    3. 可以重新加入集群
  4. 删除节点 docker node rm INVALID_ID

部署服务

docker service create –network my-swarm-net –replicas 2 –name=nginx nginx

docker service ps nginx
docker service scale nginx=5

Overlay 网络

  1. 创建 docker network create –driver overlay my-swarm-net

  2. 查看 docker network ls / docker network inspect my-swarm-net

问题

  1. docker-machine 的用处?

在上面的例子中,直接 create 出的 host ,都是固定 1G 内存的。 磁盘 CPU 什么的,没有看,但是估计也是默认值,都不是很大。
这个可以配置吗?生成环境的机器配置都是很好的,再把他们一个个分成这么小,有必要吗?再说了,一般 DB 的机器,都是吃内存大户,这么起 host 不太好吧?

如果只是批量跑一些小应用,比如 Nginx 或者 自己的 WebApp 或者 API App 什么的,还是不错的。配合上 dashboard ,管理起来很方便。

  1. 垮网域的互连?

官网上只给出了在 云服务商 创建 docker-machine 的方式。那我2个网域中的测试机器怎么互连?在创建的时候,直接指定一个都能访问到的 IP 就可以了?这个回头要试试。

更新于 2018年1月2日13:14:09 :
最近测试了下基于外网 IP 搭建 Swarm ,和内网一样简单。而且自带了证书,节点间的通讯都是加密的。
整个过程也非常简单,直接 docker swarm init --advertise-addr 公网IP 初始化。
然后再找几个能访问到外网,并且安装了 docker 和 docker swarm 的机器后,直接 join 就可以了。
再配合 https://portainer.io/ 这个 UI 更简单去查看和管理 swarm 集群信息。