一.
1.Docker Swarm是什么?
是基于Docker的集群管理工具,能够将多台主机构建成一个docker集群,用户通过API来管理多个主机上的Docker,并结合Overlay网络实现容器的调度和互相访问。
Docker Swarm默认提供两种ApI
(1)标准的API
(2)集群管理API:用于集群的管理
2.基本特性
Docker集群管理和编排的特性是通过SwarmKit进行构建的,其中Swarm模式是Docker Engine内置支持的一种默认实现
1.去中心化设计
2.声明式服务模型
3.协调预期状态于实际状态的一致性
4.多主机网络
5.负载均衡
6.安全策略
7.滚动更新
3.工作原理
二.部署Docker Swarm 集群
1.docker swarm init --advertise--addr 192.168.10.101 //创建manager节点
init:初始化
2.在设置完manager后,系统会给你设置worker节点的命令,复制下来,在所有worker节点粘贴后即可加入集群
3.docker info //查看集群的详细信息
4.Docker Swarm节点管理
docker node ls //查看节点详细信息
节点的availability有三种运行状态
actice:能运行容器的,可以被指派新的任务
pause:该节点不被指派新的任务,但是其他已经存在的任务保持运行
drain:调度来的容器的不接收,原有的容器迁走,停掉正在运行的容器,自己这里就没有容器了
docker node update --availability drain manager //修改节点状态
- docker node update --label-add group=g2 worker01 ///如果你希望运行的容器在指定节点上的话,就可以指定,这里,label:标签 group=2:整体是个标签,是由键值一块组成的,group是键
docker node inspect work01 //查看worker01节点上的信息
docker service create --name mynginx --constraint 'node.labels.group==g2' +镜像 //运用标签,将运行的容器放到自己指定的节点上 constrain:约束
6.节点的提权和降权
docker node promote worker01 worker02 //将worker01和worker02都升级为管理节点
demote 降权
docker node ls //虽然都是管理节点,能敲命令,但是leader还是原来的manager
三.Docker Swarm 服务管理
1.创建服务
(1) docker service create -p 80:80 --replicas 2 --name web nginx ///
使用 docker service create 命令创建 Docker 服务,从 Docker 镜像 nginx 创建一个名称为 web 的服务,指定服务副本数为 2。
(2)docker service logs -f web //查看日志信息
(3)docker service ls //查看已经部署的全部任务
(4)docker service ps web //查看指定服务的详细信息
(5)docker service inspect --pretty web //查看的界面更加简介,好看
2.服务的扩容缩容
(1)docker service scale web=3 //在访问量增大的时候进行扩容
(2)docker service scale web=1 //在服务量减少的时候进行缩容
(3)docker service rm web //删除服务
3.滚动更新
docker service create --replicas 3 --name redis --update-delay 10s 镜像名 //用于更新版本
docker service ps redis //查看更新后的信息
docker service update --image +其他的镜像名 +原设置的镜像名 ///用户更换镜像,也是滚动更新
四:添加自定义的Overlay网络
docker network create --driver overlay my-network //--driver:驱动器,创建一个网络
docker service create --replicas 3 --network my-network --name myweb +镜像名称或地址 //在网络中添加副本,实现容器间通信
备注:
如果 Swarm 集群中其他节点上的 Docker 容器也使用 my-network 网络,那么处于该
Overlay 网络中的所有容器之间都可以进行通信
五.数据卷的创建和应用
1.(1)docker volume create product-kgc //创建数据卷,默认在/var/lib/docker/volumes下
(2)docker service create --mount type=volume,src=product-kgc,dst=/usr/share/nginx/html --replicas 2 --name kgc-web-01
将nginx容器连接到数据卷,要指定挂载类型:--mount type 指定来源:src:在这里自己创建的卷 指定目标(挂载在哪):dst:容器内的位置
(3)docker service inspect product-kgc //查看数据卷
(4)cd /var/lib/docker/volumes/ //会查看到自己指定的product-kgc,在里面还有一个_data目录
cd /product-kgc/_data
mkdir test01
mkdir test02
创建完之后取容器中查看
docker exec -it 容器id bash
ls /usr/share/nginx/html
会查看到test01和test02的文件
但是这种方法创建的副本,会发现两个worker上的容器中的数据不一致,所有要做数据的同步
2.做容器上的数据同步,挂载共享目录,使用nfs工具,nfs工具的挂载的数据卷类型是bind
(1)在各个节点上创建共享目录
mkdir -p /var/vhost/www/aa
(2)在manager节点上安装nfs-utils
yum -y install nfs-utils
设置nfs共享
vim /etc/exports
/var/vhost/www/aa *(rw,sync,no_root_squash)
启动nfs服务
systemctl start nfs
systemctl start rpcbind
(3)在worker节点上
yum -y install nfs-utils
mount 192.168.10.101:/var/vhost/www/aa /var/vhost/www/aa
(4)创建2个kgc-web-02服务
docker service create --replicas 2 --mount type=bind,src=/var/vhost/www/aa,dst=/usr/share/nginx/html/ --name kgc-web-02 nginx
docker service ps kgc-web-02 //查看服务信息
(5)验证数据是否同步
在/var/vhost/www/aa目录下写入数据
登录到容器中
cd /usr/share/nginx/html下查看是否有数据
或者
在容器中写入数据,在docker主机上的/var/vhost/www/aa目录下查看是否有数据