Docker—— 6.Swarm

1. 概述

Docker 1.12及更高版本中,Swarm模式与Docker Engine集成。Docker Swarm是Docker官方的三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态镜像支持的核心方案。它是Docker公司推出的官方容器集群平台,基于Go语言实现(https://github.com/docker/swarm)。Docker Swarm是原生支持Docker集群管理的工具。它可以把多个Docker主机组成的系统转换为单一的虚拟Docker主机,使得容器可以组成跨主机的子网网络。在很多台机器上部署Docker,组成一个Docker集群,并把整个集群的资源抽象成资源池,使用者部署Docker应用的时候,只需要将应用交给Swarm,Swarm会根据整个集群资源的使用情况来分配资源给部署的Docker应用,可以将这个集群的资源利用率达到最大。使用Docker CLI创建群集,将应用程序服务部署到群集,并管理群体行为。其主要的目的就是更好的帮助用户管理多个Docker Engine,方便用户使用,像使用Docker Engine一样使用容器集群服务。

2. docker集群

当 Docker Engine 初始化了一个Swarm或者加入到一个存在的Swarm时,它就启动了 Swarm Mode。没启动Swarm Mode时,Docker执行的是容器命令;运行Swarm Mode后,Docker增加了编排service的能力。Docker允许在同一个Docker主机上既运行Swarm Service,又运行单独的容器。

2.1 node

Swarm中的每个Docker Engine都是一个node,有两种类型的 node:manager 和worker。
为了向Swarm中部署应用,我们需要在manager node上执行部署命令,manager node会将部署任务拆解并分配给一个或多个worker node完成部署。manager node负责执行编排和集群管理工作,保持并维护Swarm处于期望的状态。Swarm中如果有多个manager node,它们会自动协商并选举出一个leader 执行编排任务。woker node接受并执行由manager node派发的任务。默认配置下manager node同时也是一个worker node,不过可以将其配置成manager-only node,让其专职负责编排和集群管理工作。work node会定期向manager node报告自己的状态和它正在执行的任务的状态,这样manager就可以维护整个集群的状态。

2.2 service

service定义了worker node上要执行的任务。swarm的主要编排任务就是保证 service处于期望的状态下。manager node负责创建这service,swarm以节点(node)的方式组织集群(cluster);同时每个节点上面可以部署一个或者多个服务(service),每个服务又可以包括一个或者多个容器(container)。
在这里插入图片描述

3. Swarm命令

[root@master ~]# docker swarm
Commands:
ca Display and rotate the root CA
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm

3.1 创建Swarm

docker swarm init 创建Swarm,同时让swarm-manager 成为 manager node。
执行该命令后,显示添加worker node和manager node 需要执行的命令。
–advertise-addr 指定与其他node通信的地址。

docker swarm init --advertise-addr [ip]

3.1 查看swarm worker的连接令牌

docker swarm join-token worker

3.2 查看swarm manager的连接令牌

docker swarm join-token manager

3.3 加入docker swarm集群

docker swarm join --token SWMTKN-1-1next4gw4m7yx3j6q1f4z4ooimvp3pc1ahsnnwifu5w1h6b247-f10wphfpnyyunzphr1qp4kew1 192.168.1.245:2377

3.4 查看集群中的节点

docker node ls

3.5 将节点升级为manager

docker node promote work-node1

3.6 将节点降级为worker

docker node demote work-node1

3.7 删除down状态的节点

docker node rm --force worker-manager

3.8 查看服务列表

docker service ls

3.9 查看具体服务信息

docker service ps web

3.10 创建一个名称为web

docker service create --name web --replicas 3 -p 80:80 nginx

3.11 删除一个服务

docker service rm web

3.12 查看集群中节点信息

docker node inspect work-node1 --pretty

3.13 查看服务的详细信息

docker service inspect --pretty /

3.14 调度程序不会将新任务分配给节点

docker node update --availability drain work-node1

3.15 调度程序可以将任务分配给节点

docker node update --availability active work-node1

3.16 调度程序不向节点分配新任务,但是现有任务仍然保持运行

docker node update --availability pause work-node1

3.17 为指定的服务删除一个开放端口

docker service update --publish-rm 8080:80 web

3.18 为指定的服务添加一个开放端口

docker service update --publish-add 8080:80 web

3.19 回滚至之前版本

docker service update --rollback mysql

3.20 扩展或缩放服务中容器的数量

docker service scale web=5

4. 创建基本的集群环境
[root@master ~]# docker swarm init --advertise-addr 192.168.1.71
Swarm initialized: current node (83qz5smeobpi5w0pkydsdp1af) is now a manager.

To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-18l4ibikx10d0bqjadm4kh6d4850ounquhd8fes0o229hq0k44-aden7ie4o5untgbthlcgegtfv 192.168.1.71:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@node1 ~]#  docker swarm join --token SWMTKN-1-18l4ibikx10d0bqjadm4kh6d4850ounquhd8fes0o229hq0k44-aden7ie4o5untgbthlcgegtfv 192.168.1.71:2377
This node joined a swarm as a worker.

 [root@node2 ~]# docker swarm join --token SWMTKN-1-18l4ibikx10d0bqjadm4kh6d4850ounquhd8fes0o229hq0k44-aden7ie4o5untgbthlcgegtfv 192.168.1.71:2377
This node joined a swarm as a worker.
[root@master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
83qz5smeobpi5w0pkydsdp1af *   master              Ready               Active              Leader              19.03.8
lp4nabroo2482dzctwmdciyej     node1               Ready               Active                                  19.03.8
57dl7j76c18d5wrphwx4vuani     node2               Ready               Active                                  19.03.8

[root@node2 ~]# docker node ls
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.
5. 服务创建及伸缩

[root@master ~]# docker service create --replicas 3 --name httpd --publish 80:80 --dns 114.114.114.114 --dns 8.8.8.8 httpd:latest

[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d850b83c6490 httpd:latest “httpd-foreground” 18 seconds ago Up 12 seconds 80/tcp httpd.2.h0ke6x2sul2qskzkrgrywye2t
2d0e1b3497c5 httpd:latest “httpd-foreground” 39 seconds ago Up 33 seconds 80/tcp httpd.3.ki82r0jdolr2q6v9jg6pmx9hg
8fcef1b203db httpd:latest “httpd-foreground” 2 minutes ago Up 2 minutes 80/tcp httpd.1.up3q856m162n5o7jwsqlayey0

[root@master ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
xs6bf1gdg0vz httpd replicated 3/3 httpd:latest *:80->80/tcp

[root@master ~]# docker service inspect httpd
[
{
“ID”: “xs6bf1gdg0vz5hdu5nkemfd6m”,
“Version”: {
“Index”: 22

docker node update --availability drain [NODE-ID]
docker service scale nginx=3

6. 服务之间的通信

docker network ls
docker network create --driver overlay dev
docker network ls
docker service create --replicas 2 --name nginx-dev --publish 9090:80 --network dev nginx:1.12.2

7. 服务镜像升级和回滚

docker service update --image nginx:1.13.12 nginx-dev
docker service update --replicas 6 --update-parallelism 2 --update-delay 1m30s nginx-dev
service 增加到六个副本,每次更新两个副本,间隔时间一分半钟。
docker service update --rollback nginx-dev
通过 –rollback 快速恢复到更新之前的状态。
————Blueicex 2020/03/25 20:45 blueice1980@126.com

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值