Docker Swarm命令及使用总结

一、简介

Docker Swarm 是Docker官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker资源。

二、名词解释

swarm:集群的管理和编排。docker可以初始化一个swarm集群,其它节点可以加入。
node:每一个docker主机就是一个docker节点,分为 manager 节点和 worker 节点。
manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态。swarm可以有多个manager node,他们会自动协调并选举一个leader执行编排任务。不能没有manager node。
worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个worker node,不过可以将它设置为manager-only node,让他只负责编排和管理工作。
service:是指一组任务的集合,服务定义了任务的属性。
task:是swarm中的最小调度单位,目前来说一个任务就是一个单一的docker容器。
 

三、准备

虚拟机三台,分别安装Docker并启动服务。服务网格信息如下:

主机名 操作系统 IP Node
vm-xwj100 Centos7.6 192.168.20.100 manager
vm-xwj101 Centos7.6 192.168.20.101 worker
vm-xwj102 Centos7.6 192.168.20.102 worker

 

 
 

三、Swarm命令

1、初始化manager节点:

docker swarm init --advertise-addr 192.168.20.100

会看到初始化成功,当前节点为manager节点。并且也提示了增加其它worker或者manager节点的命令,如下所示:

 2、在 vm-xwj101 和 vm-xwj102 主机上,作为一个worker节点加入swarm集群(复制上面的信息):

docker swarm join --token SWMTKN-1-0szs8b7mg7ui5wtxlqcsp8ifr5yguvhw8314xd8v7o1zkro2t4-2qt8j8uqikxtb7tkdrypwqbw0 192.168.20.100:2377

3、在manager节点,执行命令获取令牌(其它节点可以通过该令牌加入到集群中):

docker swarm join-token manager         #作为一个manager加入
docker swarm join-token worker          #作为一个worker加入

 可以看到worker节点的令牌,和第一步是一样的

4、当前节点离开集群:

docker swarm leave

四、node命令

注意:只有 manager 节点才可以执行 docker node 相关命令

1、查看集群中的节点信息:

docker node ls

2、删除集群中的节点:

docker node rm 节点名称    

可选参数:

  -f           #强制删除节点(没有该参数只能删除已下线的节点)

3、将节点从 worker 升级为 manager:

docker node promote 节点名称

4、将节点从 manager 降级为 worker:

docker node demote 节点名称

五、service命令

注意:只有 manager 节点才可以执行 docker service 相关命令

1、启动服务:

docker service create [可选参数] 镜像名称

可选参数:

  • --name my-nginx     #设置容器名称
  • --replicas 5              #副本数量(默认为1)
  • -p                             #指定服务端口(主机端口:容器端口)

 

 2、查看正在运行的服务

docker service ls

可以看到当前服务有3个副本以及镜像等信息

3、查看某个服务运行状态

docker service ps 服务名称

 可以看到每个节点上都有一个docker容器在运行(这个是随机分配的)。在每个节点上,直接docker ps 也可以看到容器的运行情况

4、停止并删除某个服务(删除服务后,镜像也会全部被删除):

docker service rm 服务名称

5、修改某个服务副本数(扩缩容):

docker service update --replicas 3 服务名称

 6、对某个服务扩缩容:

docker service scale 服务名称=副本数

 六、测试

集群中的任何一台主机都可以访问容器内的应用。在浏览器中分别访问100、101、102三台主机的8888端口,都可以看到nginx的页面:

七、踩过的坑

1、如果节点加入集群失败,需要执行如下操作:

     a、关闭所有主机的防火墙。命令:systemctl stop firewalld
     b、修改主机名(主机名不能一样)
     c、在 /etc/hosts 文件下,添加三台主机的域名解析

2、扩容时,出现如下界面:

解决办法:
重启失败节点的docker服务:sudo systemctl restart docker
 

知识改变世界
原文地址:https://www.cnblogs.com/xuwenjin/p/14618846.html