Docker Swarm 是docker公司推出的官方容器集群管理平台

Docker Swarm工作原理

如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。

  • swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
  • work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。

 

 

 

 使用Swarm

1 创建集群

--advertise-addr: 指定服务鉴定的地址和端口 默认是2377端口

    1.10是管理节点

[root@server01 ~]# docker swarm init --advertise-addr 192.168.1.10
Swarm initialized: current node (pfkfgbswgt2tveahp1y3l7k0o) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-466otsvq7y06udqj1paode63suakgfuvdecniaqv0k2rlmsbw5-doy6vtd82sy5hf95h4uo0nxde 192.168.1.10:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 2 查看集群信息

[root@server01 ~]# docker info


Swarm: active
  NodeID: pfkfgbswgt2tveahp1y3l7k0o
  Is Manager: true
  ClusterID: zog4vnk3x9zcawuh2i05cyyap
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5

 3 加入进群

将node2 加入swarm集群

[root@node2 ~]# docker swarm join --token SWMTKN-1-466otsvq7y06udqj1paode63suakgfuvdecniaqv0k2rlmsbw5-doy6vtd82sy5hf95h4uo0nxde 192.168.1.10:2377
This node joined a swarm as a worker.

 4 查看集群中加入的节点信息

[root@server01 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
lhyuotw9nzmepjeylikotxgar     node2               Ready               Active                                  19.03.8
pfkfgbswgt2tveahp1y3l7k0o *   server01            Ready               Active              Leader              19.03.7

 5 使用集群服务

5.1  在管理节点执行docker service 命令快速创建一个应用服务,并制定服务的复制份数为2

[root@server01 ~]# docker service create --replicas 2 --name mynginx nginx:latest
w1zsk5bn7uuummp21ystcgxr2
overall progress: 2 out of 2 tasks 
1/2: running   
2/2: running   
verify: Service converged 

 5.2 查看服务

[root@server01 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
w1zsk5bn7uuu        mynginx             replicated          2/2                 nginx:latest  

 查看服务的具体信息:

[root@server01 ~]# docker service inspect --pretty mynginx

ID:		w1zsk5bn7uuummp21ystcgxr2
Name:		mynginx
Service Mode:	Replicated
 Replicas:	2
Placement:
UpdateConfig:

 查看容器运行情况

[root@server01 ~]# docker service ps mynginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                    ERROR               PORTS
gbud82g0qoie        mynginx.1           nginx:latest        server01            Running             Running 4 minutes ago                                
cyili1uo2gpw        mynginx.2           nginx:latest        node2               Running             Running less than a second ago   

 5.3 扩容/缩容服务

docker service scale

[root@server01 ~]# docker service scale mynginx=5
mynginx scaled to 5
overall progress: 5 out of 5 tasks 
1/5: running   
2/5: running   
3/5: running   
4/5: running   
5/5: running   
verify: Service converged 

 目前有5个nginx容器在运行

[root@server01 ~]# docker service ps mynginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                    ERROR               PORTS
gbud82g0qoie        mynginx.1           nginx:latest        server01            Running             Running 8 minutes ago                                
cyili1uo2gpw        mynginx.2           nginx:latest        node2               Running             Running less than a second ago                       
f6wijveymdhi        mynginx.3           nginx:latest        server01            Running             Running 34 seconds ago                               
pv7pm0navtiy        mynginx.4           nginx:latest        node2               Running             Running less than a second ago                       
xqa6lif2ebhj        mynginx.5           nginx:latest        server01            Running             Running 34 seconds ago                               

 6 node 离开swarm集群,node2上执行!

[root@node2 ~]# docker swarm leave
Node left the swarm.