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

相关推荐
追梦不止~41 分钟前
Docker常用命令+详解
运维·docker·容器
GJCTYU2 小时前
阿里云多端低代码开发平台魔笔使用测评
低代码·阿里云·云原生·容器·serverless·云计算
铁锤妹妹头发多2 小时前
新手用docker真**难受
运维·docker·容器
南猿北者11 小时前
docker容器
docker·容器
二十雨辰12 小时前
[linux]docker基础
linux·运维·docker
time never ceases12 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle
YCyjs13 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R13 小时前
K8s小白入门
云原生·容器·kubernetes
MonkeyKing_sunyuhua14 小时前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
追风林15 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac