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

相关推荐
huosenbulusi5 小时前
helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
云原生·容器·k8s
不会飞的小龙人6 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人6 小时前
Docker基础安装与使用
linux·运维·docker·容器
问道飞鱼6 小时前
【分布式知识】Spring Cloud Gateway实现跨集群应用访问
分布式·eureka·gateway
张3蜂6 小时前
docker Ubuntu实战
数据库·ubuntu·docker
元气满满的热码式11 小时前
K8S中Service详解(三)
云原生·容器·kubernetes
染诗11 小时前
docker部署flask项目后,请求时总是报拒绝连接错误
docker·容器·flask
张3蜂12 小时前
docker 部署.netcore应用优势在什么地方?
docker·容器·.netcore
心惠天意14 小时前
docker-compose篇---创建jupyter并可用sudo的创建方式
docker·jupyter·容器
huaweichenai15 小时前
windows下修改docker的镜像存储地址
运维·docker·容器