Swarm简介:
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
Swarm的基本架构如下图所示
这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源。管理者的管理对象不是服务器层面而是集群层面的,也就是说通过Manager,我们只能笼统地向集群发出指令而不能具体到某台具体的服务器上要干什么(这也是Swarm的根本所在)。至于具体的管理实现方式,Manager向外暴露了一个HTTP接口,外部用户通过这个HTTP接口来实现对集群的管理。对于稍微大一点的集群,最好是拿出一台实际的服务器作为专门的管理者,作为学习而言,也可以把管理者和被管理者放在一台服务器上。
下面就来讲一下如何简单地通过swarm搭建一个集群。
安装docker
既然是docker容器编排,必定要安装docker啦(仅需两句命令即可安装)。
yum install epel-release -y yum install docker
配置主节点服务器
主服务器负责调度容器分配那些啦,配置很简单,请看下面的命令
ifconfig docker swarm init --advertise-addr
为什么要内网ip呢?这种服务公开到外网,被攻击了咋办。执行了这句命令之后会输出一句命令,这句命令就是在其它服务器执行,说明要加入这个集群。
配置从服务器
只需要执行上面那句命令(下面仅仅是例子)
docker swarm join --token :2377
镜像服务器配置
请注意,请把所有用于容器编排的服务器的docker镜像源指向同一个镜像源。因为你没理由更新镜像都手工在每一个服务器更新吧,所以请自己建立私有镜像仓库,反正也特简单。
docker run -d -p :5000:5000 -v /root/my_registry:/tmp/registry registry
还是那一句话,用内网ip,真心不敢轻易使用外网。上面命令已经部署好私有仓库服务,但是这种情况下,提交镜像会报错,还需要修改一个文件。
vim /etc/docker/daemon.json
添加下面的内容(注意替换):
{ "insecure-registries":[":5000"] }
重启docker服务即可。
注意:所有需要从该私有仓库下载镜像的服务器,也需要把这段内容复制过去,ip就是私有仓库ip。
往私有镜像仓库提交镜像
我们简单说一下命令即可,不懂可以问我。
docker build --tag= . docker tag :5000/ docker push :5000/
容器编排使用
创建服务(我们把每一个应用都视为一个服务,每个服务下有若干个容器组成)
docker service create --replicas 2 --name app_b -p 33333:80 :5000/web_app_a /var/webApp
--replicas是说明一共要启动多少个容器
--name是为这个服务起一个名字
-p是端口映射,这是一个神奇的东西,以我们的例子为例,每一台服务器33333端口都会随机代理到我们服务下的一个容器,竟然连负载均衡都处理好了,完美。
:5000/web_app_a 这个只是镜像名字
/var/webApp这个只是我写的东西的启动命令而已
查看服务的容器分配情况
docker service ps
删除一个服务
docker service rm
4. 调整服务的容器个数
docker service scale =
5. 更新服务所使用的镜像
docker service update --image
6. 更新服务的内存限制
docker service update --reserve-memory
7. 查看创建了哪些服务
docker service ls
8. 查看服务器节点情况
docker node ls