Docker Swarm管理

一.

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 //修改节点状态

  1. 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目录下查看是否有数据

相关推荐
Why not try?!2 小时前
Centos7 中 Docker运行配置Apache
运维·docker·容器
hnlucky3 小时前
如何彻底清空docker里面不使用的容器?
运维·docker·容器
帷幄庸者4 小时前
CentOS 上配置 Docker 使用 NVIDIA GPU
linux·docker·centos
有梦想的攻城狮4 小时前
mac本地docker镜像上传指定虚拟机
macos·docker·eureka
lichuangcsdn5 小时前
【springcloud学习(dalston.sr1)】Eureka 客户端服务注册(含源代码)(四)
学习·spring cloud·eureka
青春不流名8 小时前
安装nerdctl和buildkitd脚本命令
容器
项目題供诗8 小时前
黑马k8s(九)
云原生·容器·kubernetes
IP管家11 小时前
企业级IP代理解决方案:负载均衡与API接口集成实践
服务器·网络·数据库·网络协议·tcp/ip·容器·负载均衡
宋康11 小时前
Docker 常用命令
docker·容器·eureka
孤的心了不冷12 小时前
【Linux】Linux安装并配置MongoDB
linux·运维·mongodb·容器