swarm是什么

碎一些闲篇,swarm貌似是从docker1.9版本开始就有了,但功能不完善、性能不稳定,一直不能登入生产环境,从1.12版本内置到了docker-engine中,可以直接使用docker swarm命令来操作swarm。
swarm是什么,swarm是docker集群的资源管理工具。简单点理解,在很多台机器上部署docker,组成一个docker集群,并把整个集群的资源抽象成资源池,使用者部署docker应用的时候,只需要将应用交给swarm,swarm会根据整个集群资源的使用情况来分配资源给部署的docker应用,可以将这个集群的资源利用率达到最大。

类似的服务框架还有mesos+marathon,kubernetes。
编者是从很早接触docker的,swarm还没有出来,kubernetes还不成熟没有人在生产环境使用。
①最早使用的是mesos+marathon那一套,优点是基于成熟的资源调度管理框架mesos,缺点是部署起来还是很麻烦的,像服务发现、负载均衡等概念在里面也都有,但都是碎片化以插件的形式存在,整个体系感觉不是很完善、不像一个整体。
②kubernetes从发布1.0版本以后在生产得到了很多实践,开始步入主流压过swarm和mesos+marathon,kubernetes针对docker应用集群的特点,概括出几个对象,pod、service、replication controller,pod为运行的基本单元,service则是专门来服务发现和服务代理的,replication controller 应用的副本做负载均衡。kubernetes就是一个很专业很全面完善的docker集群管理工具。
③swarm在很多方面很像kubernetes,不知道是不是偷偷抄袭的。swarm通过命令就可以很简单的在docker集群中创建应用设置副本数量,内置服务发现代理。swarm+compose≈kubernetes。swarm由于现在内置于docker中,使用部署更简单,功能上和kubernetes很相似,轻量级,所以也还是有很多的迷妹迷弟喜欢。

使用在什么场景

docker集群的资源管理框架适用于互联网场景,大量的应用以及负载均衡,适用于企业内部的大集群应用部署,适用于云计算的资源快速扩展和销毁场景。

创建一个swarm集群

swarm集群中是用两个节点类型的manager和worker

#创建一个新的swarm集群,并将此节点当作manager节点
docker swarm init
#命令输入完之后会打印出加入这个集群的命令,在另外一个节点上输入命令以worker节点加入集群
docker swarm join \
    --token SWMTKN-1-5w0f44j4ecgljhqhqdy4yhz2osjit4dimn2hk40vx0a3c0pa8i-72nb4zzxw2acmk6wusr4mgf4x \
    192.168.1.28:2377
#查看集群节点情况
docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
m352e8ocs9nq4zjfk4j4li0n4 *  node28    Ready   Active        Leader
qn7u85vn3jjq37caaliiki60z    node29    Ready   Active        Reachable

swarm的其它命令
Commands:
init 初始化一个swarm集群,并将次节点当作manager
join 加入一个swarm集群
join-token 查看加入此swarm集群的token信息,使用manager/worker参数查看两种,以manager加入进来的节点会当作备用manager节点
leave 离开swarm集群
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm

在集群中运行应用

docker service create \
--replicas 2 \
--publish 8080:8080 \
--mount type=bind,src=/root/,dst=/usr/local/tomcat/webapps/ROOT \
--name=tomcat \
tomcat:7

上面的应用创建后可以在任意一个节点上访问ip:8080访问tomcat服务,多个副本之间是做负载均衡的。
–replicas 副本数量
–publish 服务发现,端口映射
–mount 挂载文件
–name service名称

#查看swarm集群中的服务
docker service ls
#查看具体某个服务的情况
docker service ps tomcat