use-docker-swarm.md
使用 docker swarm 来部署应用,可以极大的减少开发人员在环境配置方面的精力花费。还能从应用部署层面了解下分布式,解耦相关的知识。
至于就提的操作命令和步骤,现查官方文档就够用了。
基础信息
- 使用到的端口
- 2377 (TCP) – 集群管理
- 7946 (TCP 与 UDP) – 节点通信
- 4789 (TCP 与 UDP) – overlay 网络
准备工作
- 创建3个节点,1个集群管理节点和2个工作节点
docker-machine create -d virtualbox manager1 |
查看结果 docker-machine ls
初始化
- 链接 manager1
- docker-machine ssh worker1
- 设置环境变量的方式 docker-machine env manager1
- 查看状态 docker-machine ls
- 创建 swarm docker swarm init –advertise-addr manager1IP
- 查看集群节点状态 docker node ls
添加和管理节点
连接 worker1 : docker-machine env worker1
加入 swarm : docker swarm join –token TOKEN manager1IP:2377
移除节点
- docker-machine env worker2
- docker swarm leave
- 可以重新加入集群
删除节点 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 网络
创建 docker network create –driver overlay my-swarm-net
查看 docker network ls / docker network inspect my-swarm-net
问题
- docker-machine 的用处?
在上面的例子中,直接 create 出的 host ,都是固定 1G 内存的。 磁盘 CPU 什么的,没有看,但是估计也是默认值,都不是很大。
这个可以配置吗?生成环境的机器配置都是很好的,再把他们一个个分成这么小,有必要吗?再说了,一般 DB 的机器,都是吃内存大户,这么起 host 不太好吧?
如果只是批量跑一些小应用,比如 Nginx 或者 自己的 WebApp 或者 API App 什么的,还是不错的。配合上 dashboard ,管理起来很方便。
- 垮网域的互连?
官网上只给出了在 云服务商 创建 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 集群信息。