精华内容
下载资源
问答
  • swarm是docker公司自己的容器集群管理工具,本文介绍了使用docker 1.12 搭建多主机docker swarm集群,分享给大家 准备 准备至少两台的centos 7 主机(全新最小安装, 可以使用虚拟机安装) 开放端口2377 tcp端口, ...
  • 主要介绍了docker swarm 集群故障与异常详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • docker swarm集群

    2021-08-30 14:27:06
    dockerhost主机可以主动初始化(init)成一个swarm集群,也可以加入一个已经存在的集群,这样,这个主机就成为了一个swarm集群的node节点,node节点分为管理者(manager)和工作节点(worker) Swarm是Docker 引擎...

    docker swarm 集群

    docker swarm 的概念

    dockerhost主机可以主动初始化(init)成一个swarm集群,也可以加入一个已经存在的集群,这样,这个主机就成为了一个swarm集群的node节点,node节点分为管理者(manager)工作节点(worker)

    Swarm是Docker 引擎内置(原生)的集群管理和编排工具。Docker Swarm是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是Docker 官方对容器云生态进行支持的核心方案。

    node节点分为manager和worker,manager负责管理编排,worder是工作节点 ​ 📌

    manager node: 负责执行容器的编排和集群的管理工作,保持并维护 swarm处于期望的状态swarm可以有多个manager node,他们会自动协调并选举出一个Leader执行编排任务。但相反,不能没有manager

    worker node: 接受并执行由manager node 派发的任务,并且默认 manager node也是一个work node,不过可以将它设置为manager-only node.让它只负责编排和管理工作

    docker swarm怎么工作的官方给出了最合理的解释:

    生产环境docker swarm集群manager最少建议还是3台,最多7台,如果只有一台的manager,如果它宕机了,下面的所有的worker节点都无法正常工作。

    PS: raft算法会保证每一台master上面运行状态一致!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3w96ABxd-1630304818444)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597845649281.png)]

    docker swarm理解

    使用docker swarm,就好比将多个dockerhost封装成一个单个大型的docker主机,所有的操作都针对的是这个大型的docker主机,映射端口的时候,我们只需要指定一个端口给这个大型docker,而组成集群的的其它dockerhost都会生效,并且如果是网站服务,自带负载均衡服务,任意一个dockerhost:port对应的是整个集群

    node节点特性

    管理节点用于Swarm集群的管理, docker swarm命令基本只能在管理节点执行(节点退出集群命令docker swarm leave可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为leader ,leader 通过raft协议实现。

    PS:工作节点可以有多个,但必须有一个管理节点

    Docker Swarm部署

    docker自带的服务,不需要安装任何东西!

    前提准备:

    关闭防火墙、禁用selinux、3台dockerhost区别主机名、时间同步,docker版本必须是v1.12以上才支持

    实验环境:

    服务主机备注
    manager172.16.46.111管理节点,也工作,相当于经理,主管
    worker172.16.46.112工作节点,相当于员工
    worker172.16.46.113工作节点,相当与员工

    1)初始化集群

    [root@docker01 ~]# docker swarm init --advertise-addr 172.16.46.111
    Swarm initialized: current node (j7lam7zskgmcmf6z2r6j7eu2o) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-50qjoehiuhvytay7b73pr36f0ji2vit8py70j690ptvbou0z3q-1ifl7qlfxh0xfobygfpf407r9 172.16.46.111:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    [root@docker01 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    j7lam7zskgmcmf6z2r6j7eu2o *   docker01            Ready               Active              Leader              18.09.0
    

    //–advertise-addr:指定与其他Node通信的地址

    初始化完成以后,返回2条命令

    在这里插入图片描述

    docker swarm join-token worker 加入集群worker命令,会生成“口令”,复制dockerhost运行

    docker swarm join-token manager 加入集群manager命令,会生成“口令”,复制dockerhost运行

    PS:令牌有效期只有24小时,过期之后需要按照上面的命令生成新的令牌​ ​ 📌

    swarm集群的操作命令

    可以使用docker swarm --help查看swarm帮助

    在这里插入图片描述

    docker node --help 查看node管理命令,只有manager权限

    在这里插入图片描述

    docker swarm leave : 申请离开一个集群,之后查看节点状态会变成down.然后可以通过manager node 将其删除。
    docker node rm xxx: 删除某个节点。
    docker swarm join-token [manager | worker]:生成令牌,可以是manager身份或worker身份。
    docker node demote(降级):将swarm节点的manager降级为work.
    docker node promote(升级): 将warm节点的work升级为manager

    PS:当只有最后一个manager的时候,最后一个manager不可以在被降级

    离开集群的步骤:

    • worker节点在全局集群离开,docker swarm leave ==> down
    • manager节点上删除 docker node rm HOSTNAME/ID

    docker service命令用来管理集群服务(重要)

    在这里插入图片描述

    设置节点的工作状态
    在这里插入图片描述
    节点工作的3种模式:

    语法:docker node update --availability drain|pause|active node_xxx

    • active 活跃态,工作状态
    • pause 暂停工作
    • drain 不工作

    2)部署docker swarm集群网络

    自定义部署集群网络,创建service服务我们不指定网络name的时候,默认是ingress

    #docker17.05版本以上支持自定义网络
    docker network create -d overlay --attachable docker
    

    PS:在创建网络的时候,我们并没有部署一个存储服务,比如consul,那是因
    为docker swarm自带存储,从而解决了跨主机网络的问题。

    //attachable: 创建网络的时候参数必须要加,否则不能用于容器。
    在这里插入图片描述

    3)部署图形化web界面

    搭建好集群以后,部署visualizer服务来图形化显示状态信息

    docker run -d -p 8080:8080 -e HOST=172.16.46.111 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer
    

    然后可以通过浏览器访问验证。

    如果访问不到网页,需开启路由转发。

    echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf  
    sysctl -p
    

    在这里插入图片描述

    4) 创建service服务

    docker service create --replicas 1 --network docker --name web1 -p 80 nginx
    

    //–replicas: 副本数量。大概可以理解为;一个副本等于一个容器。
    //查看service: docker service ls
    //查看service 信息:docker service ps xxx.
    //设置manager node 不参加工作: docker node update node-01 --availability drain

    在这里插入图片描述

    如果运行多个服务,都会在这里显示出来,不同的颜色代表不一样的容器

    案例模拟服务的升级与回滚

    搭建自己的私有仓库

    docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2
    

    更多参考docker私有仓库的文档!📌

    修改docker.service文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7bUHPvf-1630304818463)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597846737320.png)]

    systemctl daemon-reload
    systemctl restart docker
    

    保证其他节点可以下载到镜像,也需要修改docker.service

    scp /usr/lib/systemd/system/docker.service root@172.16.46.112:/usr/lib/systemd/system/docker.service
    scp /usr/lib/systemd/system/docker.service root@172.16.46.113:/usr/lib/systemd/system/docker.service
    

    重新加载docker

    systemctl daemon-reload
    systemctl restart docker
    

    自定义镜像

    其中每一次都有修改镜像内的网站根目录,分别是:111,222,333

      246  docker tag httpd:latest 172.16.46.111:5000/httpd:v1
      247  docker tag httpd:latest 172.16.46.111:5000/httpd:v2
      248  docker tag httpd:latest 172.16.46.111:5000/httpd:v3
    

    上传镜像到私有仓库

      250  docker push 172.16.46.111:5000/httpd:v1
      251  docker push 172.16.46.111:5000/httpd:v2
      252  docker push 172.16.46.111:5000/httpd:v3
    

    PS:如果想使用阿里云的作为私有仓库,因为无法自动去根据位置下载镜像。

    所以还是要用阿里云的私有仓库,需要手动上传镜像到阿里云再再下载镜像到其他2个dockerhost

    基于镜像发布服务

    [root@docker01 ~]# docker service create --replicas 6 --name bdqn -p80 172.16.46.111:5000/httpd:v1
    sqfdc1ermfvsv3xzhuwfikyeq
    overall progress: 6 out of 6 tasks 
    1/6: running   [==================================================>] 
    2/6: running   [==================================================>] 
    3/6: running   [==================================================>] 
    4/6: running   [==================================================>] 
    5/6: running   [==================================================>] 
    6/6: running   [==================================================>] 
    verify: Service converged 
    [root@docker01 ~]# 
    

    在这里插入图片描述

    服务的扩容与收缩

    [root@docker01 ~]# docker service scale 
     lzs=   web1=  
    #选择一个服务,扩容与缩容直接直接通过scale进行设置副本数量,实现扩容与收缩
    [root@docker01 ~]# docker service scale web1=3
    bdqn scaled to 3
    overall progress: 3 out of 3 tasks 
    1/3: running   [==================================================>] 
    2/3: running   [==================================================>] 
    3/3: running   [==================================================>] 
    verify: Service converged 
    

    在这里插入图片描述

    服务的升级与回滚

    平滑的升级

    [root@docker01 ~]# docker service update bdqn --image 172.16.46.111:5000/httpd:v2
    bdqn
    overall progress: 3 out of 3 tasks 
    1/3: running   [==================================================>] 
    2/3: running   [==================================================>] 
    3/3: running   [==================================================>] 
    verify: Service converged 
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5J850F2-1630304818468)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597847731802.png)]

    指定时间间隔的更新

    PS: 默认情况下,swarm一次只更新一个副本,并且两个副本之间没有等 待时间,我们可以通过

    --update-parallelism; 设置并行更新的副本数量。

    --update-delay: 指定滚动更新的时间间隔

    docker service update --image 172.16.46.111:5000/httpd:v3 --update-parallelism 2 --update-delay 30s web1
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mq02tf0z-1630304818470)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597847969388.png)]

    验证方式很多

    可以访问网站的跟目录,可以看docker ps 看版本

    这里是在容器管理界面看

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeNTAdMa-1630304818472)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597848095401.png)]

    版本回退

    [root@docker01 ~]# docker service rollback web1
    

    已经回退到了v2版本

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gtl7lE4-1630304818474)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597848332095.png)]

    docker swarm 集群数据持久化

    docker swarm集群数据一致性,并且还要保证数据可以持久化所以我们需要一台存储服务器NFS

    在集群使用docker service create创建服务时,添加mount项挂载目录,指定volume方式挂载,跟正常持久化方式一样,不过需要添加是上nfs的共享目录

    如下图

    在这里插入图片描述

    PS:docker01,02, 03可能会有多个nginx服务,不过他们挂载的内容与nfs共享的内容都是一致的且同步的

    PS:不需要手动去挂载nfs的共享目录,创建的时候指定会自动挂载

    实现集群的数据持久化

    搭建nfs服务略

    要保证都可以连接上nfs服务

    集群创建nginx服务

    docker service create --mount 'type=volume,src=nfs-test,dst=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=172.16.46.111:/nfsshare,"volume-opt=o=addr=172.16.46.111,vers=4,soft,timeo=180,bg,tcp,rw"' -p 8888:80 --name nginx nginx
    

    PS:此时,nfs共享目录和容器内的nfs-test目录还有nginx网页根目录 /usr/share/nginx/html 已经形成了一致

    如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cpTnsGpz-1630304818477)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597941434910.png)]

    服务扩容

    docker service scale nginx=6
    

    挂载情况

    在这里插入图片描述

    添加标签——服务部署条件约束

    查看集群

    [root@lzs02 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    2ts115ffyncs4kecfuinx24hx     lzs01               Ready               Active              Reachable           18.09.0
    onwzkgpiy08orbjzs437bpnie *   lzs02               Ready               Active              Reachable           18.09.0
    35yeeb5zmhg4j6fssfvwtpm6x     lzs03               Ready               Active              Leader              18.09.0
    
    

    添加标签

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UyhrWHoi-1630304818478)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1598020282472.png)]

    [root@lzs01 ~]# docker node update --label-add disk=good lzs03
    lzs03
    

    查看标签

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2pw7GIzN-1630304818481)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1598020442153.png)]

    或者

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJ03RmNM-1630304818483)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1598020518516.png)]

    服务部署条件约束

    关键字 --constraint 后添加限制条件即可

    [root@lzs01 ~]# docker service create --name web --replicas 6 --constraint 'node.labels.disk == good' -p80 httpd
    25uqr58blgbnoy40y1evqd08c
    overall progress: 6 out of 6 tasks 
    1/6: running   [==================================================>] 
    2/6: running   [==================================================>] 
    3/6: running   [==================================================>] 
    4/6: running   [==================================================>] 
    5/6: running   [==================================================>] 
    6/6: running   [==================================================>] 
    verify: Service converged 
    

    验证

    在这里插入图片描述

    展开全文
  • 阿里云搭建Docker Swarm集群Docker Swarm概念环境部署Swarm集群搭建安装Docker配置阿里云镜像加速搭建集群Raft一致性算法Swarm集群弹性创建服务(扩缩容)概念总结服务副本与全局服务Docker StackDocker Secret ...

    Docker Swarm概念

    • Docker Swarm是Docker公司开发的容器集群管理服务。从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装。
    • 与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。 但是它与docker-compose兼容的优点,可以弥补一切。 对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择。
    • Docker Swarm,主要包含以下概念:
      1. Swarm
      2. Node
      3. Stack
      4. Service
      5. Task
      6. Load balancing

    环境部署

    • 购买四台阿里云服务器

    在这里插入图片描述
    在这里插入图片描述

    Swarm集群搭建

    安装Docker

    #Xshell使用发送键到所有会话
    
    #安装gcc环境
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# yum -y install gcc gcc-c++
    
    #卸载旧版本
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# yum remove docker \
     docker-client \
     docker-client-latest \
     docker-common \
     docker-latest \
     docker-latest-logrotate \
     docker-logrotate \
     docker-engine
    
    #安装需要的软件包
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# yum install -y yum-utils
    
    #设置国内镜像仓库
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    #更新yum软件包索引
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# yum makecache fast
    
    #安装docker
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# yum install -y docker-ce docker-ce-cli containerd.io
    
    #启动Docker
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# systemctl start docker
    
    #测试命令
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker version
    

    配置阿里云镜像加速

    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# mkdir -p /etc/docker
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# tee /etc/docker/daemon.json <<-'EOF'
    > {
    >    "registry-mirrors": ["https://k68iw3ol.mirror.aliyuncs.com"]
    > }
    > EOF
    {
       "registry-mirrors": ["https://k68iw3ol.mirror.aliyuncs.com"]
    }
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# systemctl daemon-reload
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# systemctl restart docker
    

    在这里插入图片描述

    • Service
      在这里插入图片描述

    搭建集群

    docker swarm --help

    参数说明
    ca显示根CA
    init初始化集群
    join作为节点和/或管理者加入集群
    join-token管理联接令牌
    leave离开集群
    unlock解锁swarm
    unlock-key管理解锁钥匙
    update更新swarm集群
    #取消Xshell发送键到所有会话功能
    
    网络分为公网和私网,私网不要钱,所以我们选择私网 ^.^
    
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# ip a
    inet 172.20.230.69/20                    #查看主节点内网ip地址
    
    #配置当前服务器为主节点
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker swarm init --advertise-addr 172.20.230.69
    Swarm initialized: current node (zk59xicx2g4i8otyc38y534up) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-4f9ck9ouj6vlt0o21a0gc4w4m 172.20.230.69:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    #如果想添加一个管理节点,可以使用 docker swarm join-token manager进行管理
    
    获取令牌:令牌的两种角色
    docker swarm join-token manager
    docker swarm join-token worker
    
    
    #如果节点角色添加错误,使用如下命令离开集群
    [root@iZ2vc78wcid7zh9m0ohptcZ ~]# docker swarm leave --force
    Node left the swarm.
    
    #在其他节点通过令牌加入集群
    [root@iZ2vc78wcid7zh9m0ohptcZ ~]# docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-4f9ck9ouj6vlt0o21a0gc4w4m 172.20.230.69:2377
    This node joined a swarm as a worker.    #此节点作为工作节点加入集群
    
    #在主节点查看节点信息
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]#  docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up *   iZ2vc78wcid7zh9m0ohptaZ   Ready     Active         Leader           20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    
    #可以复制刚才的命令,也可以在主节点再次生成工作节点令牌
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker swarm join-token worker
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-4f9ck9ouj6vlt0o21a0gc4w4m 172.20.230.69:2377
    
    #将第三台服务器加入集群
    [root@iZ2vc78wcid7zh9m0ohptbZ ~]# docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-4f9ck9ouj6vlt0o21a0gc4w4m 172.20.230.69:2377
    This node joined a swarm as a worker.
    
    #主节点再次查看
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]#  docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up *   iZ2vc78wcid7zh9m0ohptaZ   Ready     Active         Leader           20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Ready     Active      #没写就是工作节点     20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    
    #将第四台服务器作为主节点
    #在主节点创建一个主节点令牌
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker swarm join-token manager
    To add a manager to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-dujruc82bc5haxqaqanex7yyr 172.20.230.69:2377
    
    
    [root@iZ2vc78wcid7zh9m0ohptdZ ~]# docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-dujruc82bc5haxqaqanex7yyr 172.20.230.69:2377
    This node joined a swarm as a manager.  #这个节点作为管理者加入了一个群
    
    #再次从主节点查看节点信息
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up *   iZ2vc78wcid7zh9m0ohptaZ   Ready     Active         Leader           20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Ready     Active                          20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    ey0eah3z0oxa08grbqvumhpgu     iZ2vc78wcid7zh9m0ohptdZ   Ready     Active         Reachable        20.10.7
    
    #Reachable是可触达的,也是manager节点, Leader和Reachable是可达的
    #至此,集群搭建完毕
    

    Raft一致性算法

    • 当前双主双从搭建完毕,假设一个节点down,其他节点能否可用?
    • Raft协议:保证大多数节点存活才可用!集群至少大于三台!
    #假设docker-1主节点宕机
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# systemctl stop docker
    
    #发现另外一个管理节点也不能用了
    [root@iZ2vc78wcid7zh9m0ohptdZ ~]# docker node ls
    Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.
    
    #重启主节点
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# systemctl start docker
    
    #重启之后Leader变成了iZ2vc78wcid7zh9m0ohptdZ
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up *   iZ2vc78wcid7zh9m0ohptaZ   Ready     Active         Reachable        20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Ready     Active                          20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    ey0eah3z0oxa08grbqvumhpgu     iZ2vc78wcid7zh9m0ohptdZ   Ready     Active         Leader           20.10.7
    
    #将docker-3离开集群
    [root@iZ2vc78wcid7zh9m0ohptbZ ~]# docker swarm leave
    Node left the swarm.
    
    #iZ2vc78wcid7zh9m0ohptbZ状态变为down
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up *   iZ2vc78wcid7zh9m0ohptaZ   Ready     Active         Reachable        20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Down      Active                          20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    ey0eah3z0oxa08grbqvumhpgu     iZ2vc78wcid7zh9m0ohptdZ   Ready     Active         Leader           20.10.7
    
    #将iZ2vc78wcid7zh9m0ohptbZ也作为管理节点加入集群
    #在管理节点生成令牌
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker swarm join-token manager
    To add a manager to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-dujruc82bc5haxqaqanex7yyr 172.20.230.69:2377
    
    #将iZ2vc78wcid7zh9m0ohptbZ作为管理节点加入
    [root@iZ2vc78wcid7zh9m0ohptbZ ~]# docker swarm join --token SWMTKN-1-0b3vfe36f8dylni6k4cvs6domv9bv2rk3z9bncm5xd3iwtet9p-dujruc82bc5haxqaqanex7yyr 172.20.230.69:2377
    This node joined a swarm as a manager.
    
    #再次查看节点信息,中间显示down已经跟bz节点没有关系了
    [root@iZ2vc78wcid7zh9m0ohptbZ ~]# docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up     iZ2vc78wcid7zh9m0ohptaZ   Ready     Active         Reachable        20.10.7
    96l3fj0h78efdeii7wzez2812 *   iZ2vc78wcid7zh9m0ohptbZ   Ready     Active         Reachable        20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Down      Active                          20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    ey0eah3z0oxa08grbqvumhpgu     iZ2vc78wcid7zh9m0ohptdZ   Ready     Active         Leader           20.10.7
    
    #目前3台机器设置为了管理节点,之前设置双主down掉一台就无法使用了,现在有三台再做一次测试
    
    #再次停止主节点
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# systemctl stop docker
    
    #主节点提示Unreachable不可达
    #但是另外两台管理节点仍可用
    [root@iZ2vc78wcid7zh9m0ohptdZ ~]# docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up     iZ2vc78wcid7zh9m0ohptaZ   Down      Active         Unreachable      20.10.7
    96l3fj0h78efdeii7wzez2812     iZ2vc78wcid7zh9m0ohptbZ   Ready     Active         Reachable        20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Down      Active                          20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    ey0eah3z0oxa08grbqvumhpgu *   iZ2vc78wcid7zh9m0ohptdZ   Ready     Active         Leader           20.10.7
    
    [root@iZ2vc78wcid7zh9m0ohptbZ ~]# docker node ls
    ID                            HOSTNAME                  STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    zk59xicx2g4i8otyc38y534up     iZ2vc78wcid7zh9m0ohptaZ   Down      Active         Unreachable      20.10.7
    96l3fj0h78efdeii7wzez2812 *   iZ2vc78wcid7zh9m0ohptbZ   Ready     Active         Reachable        20.10.7
    zn6i80052i8efkqzh21cvzn40     iZ2vc78wcid7zh9m0ohptbZ   Down      Active                          20.10.7
    0562ncmx9wn7w4ujxe8kmr7ob     iZ2vc78wcid7zh9m0ohptcZ   Ready     Active                          20.10.7
    ey0eah3z0oxa08grbqvumhpgu     iZ2vc78wcid7zh9m0ohptdZ   Ready     Active         Leader           20.10.7
    
    • 集群,可用!至少3个主节点 随时 >1台管理节点存活!否则不可用!
    • Raft协议:保证大多数节点存活,才可以使用,高可用!

    Swarm集群弹性创建服务(扩缩容)

    docker service --help

    参数说明
    create创建新服务
    inspect显示一个或多个服务的详细信息
    logs获取服务或任务的日志
    ls列出服务
    ps列出一个或多个服务的任务
    rm删除一个或多个服务
    rollback恢复对服务配置的更改
    scale扩展一个或多个复制服务
    update更新服务
    #通过docker service启动一个项目
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service create -p 8888:80 --name my-nginx nginx
    m7hheqvgr99y9kf28w38hid0d
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged
    
    #docker run 容器启动!不具备扩缩容容器
    #docker service 服务!具有扩缩容器,滚动更新
    
    #查看服务
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service ps my-nginx
    ID             NAME         IMAGE          NODE                      DESIRED STATE   CURRENT STATE           ERROR     PORTS
    39jbwrwdln02   my-nginx.1   nginx:latest   iZ2vc78wcid7zh9m0ohptcZ   Running         Running 2 minutes ago
    #REPLICAS副本,只存在一个节点上
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service ls
    ID             NAME       MODE         REPLICAS   IMAGE          PORTS
    m7hheqvgr99y   my-nginx   replicated   1/1        nginx:latest   *:8888->80/tcp
    
    #查看详细信息
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service inspect my-nginx
    
    #副本启动再cz上,是随机分部在管理节点上的
    [root@iZ2vc78wcid7zh9m0ohptcZ ~]# docker ps
    CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
    2100d7739f58   nginx:latest   "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   80/tcp    my-nginx.1.39jbwrwdln0275oj1e2rycncm
    
    #动态扩缩容,创建三个副本
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service update --replicas 3 my-nginx
    my-nginx
    overall progress: 3 out of 3 tasks 
    1/3: running   [==================================================>] 
    2/3: running   [==================================================>] 
    3/3: running   [==================================================>] 
    verify: Service converged
    
    #使用docker ps 在其余节点查看服务分配情况
    
    • 访问四台服务器的ip都可以
      在这里插入图片描述
    • 端口号需要在阿里云安全组放行
      在这里插入图片描述
    #动态扩容10个副本
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service update --replicas 10 my-nginx
    my-nginx
    overall progress: 10 out of 10 tasks 
    1/10: running   [==================================================>] 
    2/10: running   [==================================================>] 
    3/10: running   [==================================================>] 
    4/10: running   [==================================================>] 
    5/10: running   [==================================================>] 
    6/10: running   [==================================================>] 
    7/10: running   [==================================================>] 
    8/10: running   [==================================================>] 
    9/10: running   [==================================================>] 
    10/10: running   [==================================================>] 
    verify: Service converged
    #只要是个服务,集群中的任意节点都可以访问!服务可用有多个副本动态扩缩容实现高可用
    
    #动态缩容
    #实现服务的高可用
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service update --replicas 1 my-nginx 
    my-nginx
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged
    
    
    #当前只有一个副本,可用使用scale进行扩容,与update同样的用法
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service ls
    ID             NAME       MODE         REPLICAS   IMAGE          PORTS
    m7hheqvgr99y   my-nginx   replicated   1/1        nginx:latest   *:8888->80/tcp
    
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service scale my-nginx=5
    my-nginx 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
    
    #移除服务
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service rm my-nginx
    my-nginx
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service ls
    ID        NAME      MODE      REPLICAS   IMAGE     PORTS
    

    概念总结

    • Swarm
      • 集群的管理和编号。docker可以初始化一个swarm集群,其他节点可以加入。(管理、工作者)
    • Node
      • 就是一个docker节点,多个节点组成一个网络集群
    • Service
      • 任务,可用在管理节点或工作节点运行,核心,用户访问!
    • Task任务
      • 容器内部的命令,细节任务!
        在这里插入图片描述
    • 命令 -> 管理 -> api -> 调度 -> 工作节点(创建Task容器维护创建)

    服务副本与全局服务

    在这里插入图片描述

    • 调整service以什么方式运行
    --mode string
    service mode (replicated or globa1) (default "replicated")
    
    docker service create --mode rep7icated --name mytom tomcat:7 默认的
    
    docker service create --mode global --name haha alpine ping baidu.com
    #场景?日志收集
    每一个节点有自己的日志收集器,过滤。把所有日志最终再传给日志中心
    服务监控,状态性能。
    
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service create -p 8888:80 --name my-nginx nginx
    
    #查看详细信息
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service inspect my-nginx
    
    #动态扩容
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service scale my-nginx=5
    #再次查看细节
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker service inspect my-nginx
    
    
    #网络模式
    "PublishMode":"ingress"
    Swarm中有三个重要的网络
    
    默认ingress网络
    ingress:特殊的Overlay网络,具有负载均衡的功能!
    
    [root@iZ2vc78wcid7zh9m0ohptaZ ~]# docker network inspect ingress
    虽然docker在4台机器上,实际上网络是同一个!ingress网络,是一个特殊的Overlay网络
    网络变成一个整体!
    

    Docker Stack

    • Docker-compose 单机部署项目
    • Docker Stack 部署,集群部署!

    docker stack

    参数说明
    deploy部署新堆栈或更新现有堆栈
    ls列出堆栈
    ps列出堆栈中的任务
    rm移除一个或多个堆栈
    services列出堆栈中的服务
    #单机
    docker-compose up -d wordpress.yaml
    #集群
    docker stack deploy wordpress.yaml
    
    #例
    version: '3.4'
    services:
      mongo:
        image: mongo
        restart: always
        networks: 
          - mongo_network
        deploy:
          restart_policy:
            condition: on-failure
          replicas: 2               #副本数为两个
      mongo-express: 
        image: mongo-express
        restart: always
        networks: 
          - mongo_network
        ports:
          - target: 8081
            published: 80
            protocol: tcp
            mode: ingress
        environment:
          ME_CONFIG_MONGODB_SERVER: mongo
          ME_CONFIG_MONGODB_PORT: 27017
        deploy:
          restart_policy:
            condition: on-failure
          replicas: 1
    networks:
      mongo_network:
        external: true
    

    Docker Secret

    • 安全!配置密码加密,证书等!

    docker secret --help

    参数说明
    create创建一个证书
    inspect查看证书细节内容
    ls列出证书
    rm删除一个或多个证书
    展开全文
  • 但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。 Docker swarm:其...

    一、Docker swarm简介

    Docker swarm与docker-compose一样,都是docker官方推出的docker容器的编排工具。但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

    Docker swarm:其作用就是把若干个Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

    从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

    Docker swarm中有三种角色:

    Manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态,swarm可以有多个mana gernode,他们会自动协商选举出一个leader执行编排任务;但相反,不能没有manager node;
    Worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个worknode,不过可以将它设置manager-only node,让它负责编排和管理工作;
    Service:用来定义worker上执行的命令;

    注意:在一个Docker Swarm群集中,每台docker服务器的角色可以都是manager,但是,不可以都是worker,也就是说,不可以群龙无首,并且,参与群集的所有主机名,千万不可以冲突。

    二、环境准备

    系统版本docker版本主机名ip地址
    node01192.168.10.52
    centos 7.518.09.0node02192.168.10.53
    node03192.168.10.54

    注意事项:
    保证时间同步;
    关闭防火墙与SElinux(实验环境);
    更改主机名;
    编写host文件,保证可以i进行域名解析;
    确保docker服务正在运行

    三、初始化Swarm群集

    [root@node01 ~]# tail -3 /etc/hosts       
    192.168.10.52 node01
    192.168.10.53 node02
    192.168.10.54 node03
    //三台主机都需配置hosts文件实现域名解析的效果
    [root@node01 ~]# docker swarm init --advertise-addr 192.168.10.52
    //--advertise-addr:指定与其他node通信的地址
    

    命令的返回信息,如图:
    在这里插入图片描述

    四、配置node02、node03加入、离开swarm群集

    node02的操作如下

    [root@node02 ~]# docker swarm join --token SWMTKN-1-1dng6ya431doiv4zco0ctidewipqtmdtazho5x8dm86y3cpugm-1j61jldff1deanqug6bxsxd5i 192.168.10.52:2377
    This node joined a swarm as a worker.
    

    node03的操作如下

    [root@node03 ~]# docker swarm join --token SWMTKN-1-1dng6ya431doiv4zco0ctidewipqtmdtazho5x8dm86y3cpugm-1j61jldff1deanqug6bxsxd5i 192.168.10.52:2377
    This node joined a swarm as a worker.
    

    //node02、node03默认是以worker身份加入的

    node01的操作如下

    [root@node01 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    cs215etnv76dfzxu6ogmu2nk2     node02              Ready               Active                                  18.09.0
    oec4ev02mg6zyb38rkwxydyel     node03              Ready               Active                                  18.09.0
    xojmrky2j13xr6fiq07eub57j *   npde01              Ready               Active              Leader              18.09.0
    //可以看出node01、node02、node03的状态为Active
    

    node02、node03申请离开集群

    [root@node02 ~]# docker swarm leave
    
    [root@node03 ~]# docker swarm leave
    

    node01的操作如下

    [root@node01 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    cs215etnv76dfzxu6ogmu2nk2     node02              Down                Active                                  18.09.0
    oec4ev02mg6zyb38rkwxydyel     node03              Down                Active                                  18.09.0
    xojmrky2j13xr6fiq07eub57j *   npde01              Ready               Active              Leader              18.09.0
    ///可以看到node02、node03的状态为Down
    [root@node01 ~]# docker node rm node02
    [root@node01 ~]# docker node rm node03
    //node01将node02、node03移除群集
    [root@node01 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    xojmrky2j13xr6fiq07eub57j *   npde01              Ready               Active              Leader              18.09.0
    
    //如果worker节点没有辞职,manager节点可以使用“-f”表示强制开出worker节点
    

    加入群集时,可以指定使用manager、worker身份,但是也可以通过以下命令,进行降级、升级,操作

    [root@node01 ~]# docker swarm join-token manager 
    //查询以manager身份加入群集的命令
    [root@node01 ~]# docker swarm join-token worker
    //查询以worker身份加入群集的命令
    

    在这里插入图片描述

    [root@node01 ~]# docker node demote node02
    [root@node01 ~]# docker node demote node03
    //将node02、node03降级为worker
    [root@node01 ~]# docker node promote node02
    [root@node01 ~]# docker node promote node03
    //将node02、node03升级为manager
    

    五、部署图形化UI

    [root@node01 ~]# docker run -d -p 8080:8080 -e HOST=172.16.0.10 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer
    //-e HOST指定的是容器
    

    在这里插入图片描述

    六、docker swarm群集的service服务配置

    node01发布一个任务,(必须在manager角色的主机上)运行五个容器,命令如下:
    [root@node01 ~]# docker service create --replicas 5  --name web -p 80:80 nginx
    // --replicas:副本数量;大概可以理解为一个副本就是一个容器
    

    在这里插入图片描述

    注意:如果另外两台节点服务器上没有相应的镜像,则默认会从docker Hub上自动进行下载!

    [root@node01 ~]# docker service ls   //查看创建的service
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    qein8zix8an1        web                 replicated          5/5                 nginx:latest        *:80->80/tcp
    [root@node01 ~]# docker service ps web   //查看创建的service都运行在那些容器上
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
    bhetrut34wa8        web.1               nginx:latest        node01              Running             Running about a minute ago                       
    ao7cauwtgwdh        web.2               nginx:latest        node02              Running             Running about a minute ago                       
    9vn7c6feas61        web.3               nginx:latest        node03              Running             Running about a minute ago                       
    pooq631f4evk        web.4               nginx:latest        node02              Running             Running about a minute ago                       
    hn1bfur0u2ri        web.5               nginx:latest        node03              Running             Running about a minute ago                  
    

    如果现在node02、node03发生宕机时,service并不会因为节点的当即而死掉,而是自动跑到正常的节点上。

    模拟node02宕机
    [root@node02 ~]# systemctl stop docker
    

    在这里插入图片描述

    恢复node02
    [root@node02 ~]# systemctl start docker
    

    在这里插入图片描述
    即使node02恢复正常,也不会将service分配给node02。
    因此,可以得出一个结论:如果node发生故障,service会自动跑到可用的节点上;反之,如果node没有发生故障,默认情况下,service不会轻易更改节点!

    七、实现service的扩容、收缩

    (1)service扩容 扩容:就是添加几台service;

    [root@node01 ~]# docker service scale web=8
    //原本有5个service,现在增加到8台
    

    在这里插入图片描述
    关于service分配到那台node节点上,是根据docker swarm自身的算法进行分配的。

    (2)service收缩 收缩:就是减少几台service;

    [root@node01 ~]# docker service scale web=4
    //原本有8个service,现在减少到4台
    

    在这里插入图片描述

    (3)设置某个node不运行service
    上述环境中,一台manager、两台worker默认情况manager也是进行工作的,可以通过设置,使某台节点不运行service,如下:

    [root@node01 ~]# docker node update --availability drain node01
    //设置noder01以后不运行容器,但已经运行的容器并不会停止
    // --availability:选项后面共有三个选项可配置,如下:
    active:工作;pause:暂时不工作;drain:永久性的不工作
    

    在这里插入图片描述

    [root@node01 ~]# docker node update --availability drain node02
    //node02也不参加工作,但已经运行的容器并不会停止
    

    在这里插入图片描述
    由此可以得出:不是只有manager才有不工作的权力!

    八、docker swarm网络

    docker swarm集群会产生两种不同类型的流量:

    1.控制和管理层面:包括swarm消息管理等,例如请求加入或离开swarm,这种类型的流量总是被加密的(涉及到集群内部的hostname、ip-address、subnet、gateway等);
    2.应用数据层面:包括容器与客户端的通信等(涉及到 防火墙、端口映射、VIP等);

    在swarm中有三个重要的概念:

    overlay networks:管理swarm中Docker守护进程间的通信。你可以将服务附加到一个或多个已存在的overlay网络上,使得服务与服务之间能够通信;
    ingress network:是一个特殊的overlay网络,用于服务节点间的负载均衡。当然任何swarm节点在发布的端口上接收到请求后,将请求交给一个名为IPVS的模块。IPVS跟踪参与该服务的所有IP地址,选择其中的一个,并通过ingress网络将请求到它;
    docker_gwbridge:是一种桥接网络,将overlay网络(包括ingress网络)连接到一个单独的Docker守护进程的物理网络。默认情况下,服务正在运行的每个容器都连接到本地Docker守护进程主机的docker_gwbridge网络;

    docker_gwbridge网络在初始化Swarm或加入Swarm时自动创建。大多数情况下,用户不需要自定义配置,但是Docker允许自定义;
    查看node01上默认的网络,如图:
    在这里插入图片描述
    注意:图中的SCOPE,注意其作用范围!

    除了Swarm群集默认创建的两个网络以外,我们还可以自定义创建overlay网络,连接到此网络的容器,即可互相通信,,但是需要注意,自定义的网络只能是创建的manager主机才可查看到!

    创建自定义overlay网络

    [root@node01 ~]# docker network create -d overlay --subnet 200.0.0.0/24 --gateway 200.0.0.1 --attachable my_net
    //Docker swarm群集创建overlay网络时,必须使用--attachable选项来指定名称,否则其他节点的容器运行时无法使用此网络
    

    创建自定义的overlay网络时,必须是manager才可以创建,并且只在manager节点上才显示的,别的worker节点是查看不到的,但是可以使用。
    如下:
    在这里插入图片描述

    [root@node02 ~]# docker run -itd --name test01 --ip 200.0.0.10 --network my_net busybox
    //node02使用刚才自定义的overlay网络创建容器
    [root@node03 ~]# docker run -itd --name test02 --ip 200.0.0.20 --network my_net  busybox
    //node03使用自定义的overlay网络创建容器
    

    测试访问:
    在这里插入图片描述
    在这里插入图片描述

    这是node02、node03已经使用过这个自定义的网络了,这是在node02、node03上就可以查看到了!
    在这里插入图片描述
    在这里插入图片描述
    而且基于docker swarm创建的overlay网络也符合自定义跨主机网络的特点,可以使用主机名进行通信

    九、搭建registry私有仓库

    通过搭建registry私有仓库,可以便于让其他node下载镜像。搭建私有仓库可以参考Docker——搭建私有仓库registry+Harbor

    [root@node01 ~]# docker run -itd --name registry -p 5000:5000 -v /registry:/var/lib/registry --restart=always registry:2
    [root@node01 ~]# vim /usr/lib/systemd/system/docker.service 
    //更改内容为
    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.10.52:5000
    [root@node01 ~]# systemctl daemon-reload 
    [root@node01 ~]# systemctl restart docker
    [root@node01 ~]# docker ps -a -q | xargs docker start
    //由于刚才创建的容器并没有设置自动启动,所以在重启docker服务的时候,需要手动启动
    [root@node01 ~]# ssh-keygen -t rsa
    [root@node01 ~]# ssh-copy-id root@node02
    [root@node01 ~]# ssh-copy-id root@node03
    //设置免密登录
    [root@node01 ~]# scp /usr/lib/systemd/system/docker.service root@node02:/usr/lib/systemd/system/docker.service
    [root@node01 ~]# scp /usr/lib/systemd/system/docker.service root@node03:/usr/lib/systemd/system/docker.service
    //将docker的配置文件复制到node02、node03上,因为docker的配置文件都是一样的内容
    
    [root@node02 ~]# systemctl daemon-reload 
    [root@node02 ~]# systemctl restart docker  
    
    [root@node03 ~]# systemctl daemon-reload 
    [root@node03 ~]# systemctl restart docker
    //重新启动node02、node03节点的docker服务
    
    [root@node01 ~]# docker pull httpd
    [root@node01 ~]# docker tag httpd:latest 192.168.10.52:5000/httpd:latest
    [root@node01 ~]# docker push 192.168.10.52:5000/httpd:latest 
    //将httpd镜像上传到私有仓库中
    
    //node02下载刚刚上传私有仓库的镜像
    [root@node02 ~]# docker images    //先查看一下镜像
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               <none>              08393e824c32        5 days ago          132MB
    busybox             latest              018c9d7b792b        13 days ago         1.22MB
    [root@node02 ~]# docker pull 192.168.10.52:5000/httpd:latest   //下载
    latest: Pulling from httpd
    bf5952930446: Already exists 
    3d3fecf6569b: Pull complete 
    b5fc3125d912: Pull complete 
    679d69c01e90: Pull complete 
    76291586768e: Pull complete 
    Digest: sha256:fc717ed0d0b55ada05af1c1a95a2d4ee1153a5858fd65b654644a1a5add0c28b
    Status: Downloaded newer image for 192.168.10.52:5000/httpd:latest
    [root@node02 ~]# docker images   //在此查看
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    192.168.10.52:5000/httpd   latest              a6ea92c35c43        4 days ago          166MB
    nginx                      <none>              08393e824c32        5 days ago          132MB
    busybox                    latest              018c9d7b792b        13 days ago         1.22MB
    
    

    如果是基于上面的环境做的,你需要使用docker node update node01 --availability active 这条命令使node01继续工作,才能得到如下结果图

    十、service服务版本的升级与回滚

    (1)准备环境

    [root@node01 ~]# mkdir version{1,2,3,}
    [root@node01 ~]# cd version1
    [root@node01 version1]# echo "version1" >> index.html
    [root@node01 version1]# echo -e "FROM httpd:latest\nADD index.html /usr/local/apache2/htdocs/index.html" > Dockerfile
    [root@node01 version1]# docker build -t 192.168.10.52:5000/httpd:v1 .
    //version1目录下模拟生成版本v1
    [root@node01 version1]# cp Dockerfile ../version2
    [root@node01 version1]# cd !$
    cd ../version2
    [root@node01 version2]# echo "version2" >> index.html
    [root@node01 version2]# docker build -t 192.168.10.52:5000/httpd:v2 .
    //vesion2目录下模拟生成版本v2
    [root@node01 version2]# cp Dockerfile ../version3
    [root@node01 version2]# cd !$
    cd ../version3
    [root@node01 version3]# echo "version3" >> index.html
    [root@node01 version3]# docker build -t 192.168.10.52:5000/httpd:v3 .
    //vesion3目录下模拟生成版本v3
    //注意在主页面做一些区分
    [root@node01 ~]# docker push 192.168.10.52:5000/httpd:v1
    [root@node01 ~]# docker push 192.168.10.52:5000/httpd:v2
    [root@node01 ~]# docker push 192.168.10.52:5000/httpd:v3
    //将生成的镜像上传到私有仓库
    [root@node01 ~]# docker service create --replicas 3 --name httpd 192.168.10.52:5000/httpd:v1
    //基于192.168.10.52:5000/httpd:v1创建三个service副本
    

    浏览器访问测试:
    在这里插入图片描述
    三个service副本是轮询的方式来服务的,根据node02、node03的首页内容进行测试!

    (2)版本升级

    [root@node01 ~]# docker service update --image 192.168.10.52:5000/httpd:v2 httpd
    //更新容器的镜像为版本2
    

    浏览器进行测试:
    在这里插入图片描述
    默认情况下,swarm一次只更新一个副本,并且两个副本之间并没有等待时间

    [root@node01 ~]# docker service update --replicas 6 --image 192.168.10.52:5000/httpd:v3 --update-parallelism 2 --update-delay 1m httpd
    //--update-parallelism:设置更新的副本数量;
    //--update-delay:更新的间隔时间
    // --replicas 6:并在升级的过程中另外再创建3个副本
    

    从更新的过程中可以看出效果!

    浏览器确认版本更新成功:
    在这里插入图片描述
    (3)版本回滚

    [root@node01 ~]# docker service rollback httpd
    //回滚为上一个版本
    

    在这里插入图片描述

    注意:当我们执行回滚操作的时候,默认是回滚到上一次操作的版本,并且不可以连续回滚。

    十一、docker Swarm群集常用命令

    [root@node02 ~]# docker swarm leave 
    //那个节点想退出swarm群集,就在那台节点上执行这条命令
    //节点自动退出swarm群集(相当于辞职)
    [root@node01 ~]# docker node rm 节点名称
    //由manager主动删除节点(相当于开除)
    [root@node01 ~]# docker node promote 节点名称
    //将节点升级
    [root@node01 ~]# docker node demote 节点名称
    //将节点降级
    [root@node01 ~]# docker node ls          
    //查看swarm群集的信息(只可以在manager角色的主机上查看)
     [root@node01 ~]# docker node update --availability drain 节点名称
     //调整节点不参加工作
     [root@node01 ~]# docker node update 节点名称 --availability active 
     //调整节点在参加工作
     [root@node01 ~]# docker swarm join-token worker
    //查看加入swarm群集的令牌(可以是worker也可以是manager)
    [root@node01 ~]# docker service scale web=4
    //扩容、收缩swarn群集servie的数量(取决与群集原本的数量)
    //比原本群集数量多,就是扩容,反之、收缩
    [root@node01 ~]# docker service ls
    //查看创建的service
    [root@node01 ~]# docker service ps service的名称
    //查看创建的service运行在那些容器上
    [root@node01 ~]# docker service create --replicas 6  --name web -p 80:80 nginx
    //指定运行的service副本数量
    [root@node01 ~]# docker service create --replicas 3 --constraint node.hostname==node03 --name test nginx
    //指定node节点,创建名为test的容器
    [root@node01 ~]# docker node update --label-add mem=max node02
    //以键值对的方式给docker02主机打上标签“mem=max”,等号两边的内容是可以自定义的
    [root@node01 ~]# docker service create --name test1 --replicas 3 --constraint 'node.labels.mem==max' nginx
    //基于nginx镜像在标签为“mem==max”的主机上运行3个名为test1的服务
    [root@node01 ~]# docker node inspect node02
    //标签相关的信息,在Spec{  }中有显示
    

    十二、docker swarm总结

    1.参与群集的主机名一定不能冲突,并且可以互相解析对方的主机名;
    2.集群内的所有节点可以都是manager角色,但是不可以都是worker角色;
    3.当指定运行的镜像时,如果群集中的节点本地没有该镜像,那么它将会自动下载对应的镜像;
    4.当群集正常工作时,若一个运行着容器的docker服务器发生宕机,那么,其所运行的所有容器,都将转移到其他正常运行的节点之上,而且,就算发生宕机的服务器恢复正常运行,也不会再接管之前运行的容器;

    展开全文
  • 这是将 docker-gen 连接到 Docker Swarm 集群的示例。 请参阅帖子了解更多详情。 在开始之前 将docker-gen二进制文件放在docker-gen/文件夹中。 将 Docker Swarm master 的 SSL 证书复制到docker-gen/certs文件夹...
  • 用于Docker Swarm集群管理的Ansible手册。 允许在没有直接互联网连接的主机上安装(使用http(s)代理)。 要求 平台: RHEL 7 CentOS的7 Ubuntu 16.04 Ubuntu 18.04 Debian 9 角色变量 有关详细信息,请参见...
  • Docker1.12以及后续版本集成了swarmkit工具,该工具主要用于Docker集群管理和容器编排,因此,开发者可以不用安装额外的软件包,只需使用简单的命令就可以创建并管理Docker swarm集群Docker Swarm集群的主要特点...

    1.2.1 Docker Swarm概述
    Docker Swarm是一个用于创建和管理Docker集群的工具。Docker1.12以及后续版本集成了swarmkit工具,该工具主要用于Docker集群管理和容器编排,因此,开发者可以不用安装额外的软件包,只需使用简单的命令就可以创建并管理Docker swarm集群。
    Docker Swarm集群的主要特点如下:
    (1)方便创建和管理集群
    Docker Swarm是Docker源生的集群管理工具,可以直接使用Docker客户端来创建并管理一个Docker Swarm集群,然后在其中部署应用 程序服务,而不需要额外的编配软件来创建或者管理集群。
    (2)可扩展
    对于集群中的每个服务,都可以声明要运行的副本任务数量,当向上或向下进行扩展时,集群管理器将通过添加或删除副本任务来自动适 应所需的状态。
    (3)可实现期望的状态调节
    集群管理器节点不断监视集群状态,并协调实际状态和所期望状态之间的任何差异。例如,如果启动一个服务的10个副本任务,当一个Docker节点承载其中两个副本崩溃时,那么管理器将创建两个新的副本来替换崩溃的副本。
    (4)集群中多主机网络自动扩展管理
    Docker Swarm为集群服务提供了一个覆盖网络,当它初始化或更新应用程序时,集群管理器会自动在工作节点创建或更新网络来管理服务。
    (5)提供服务发现功能
    集群管理器节点为集群中每个服务分配一个唯一的DNS网络,通过Docker Swarm集群提供的负载均衡功能,可以通过嵌入在集群中的DNS服务器服务器来查询集群中运行的每个容器。
    (6)可实现负载均衡
    可以将容器中服务的端口暴露给外部负载均衡器,而在内部,集群允许指定如何在节点之间分配服务容器。
    (7)安全性强
    集群中的每个节点强制使用TLS相互认证和加密,以确保自身和其他节点之间的通信安全。除此之外,集群还支持使用自定义的自签名证书来保证安全。
    (8)支持延迟更新和服务回滚
    在进行服务更新时,可以将服务更新逐步延伸到每个节点上,集群管理器允许服务部署到不同节点组之间时出现延迟,如果某个节点出现问题,还可以将服务回滚到以前的版本。
    1.2.2 Docker Swarm使用
    使用Docker Swarm集群的具体步骤如下:
    1.环境搭建
    (1)准备3台Ubuntu系统主机(即用于搭建集群的3个Docker机器),每台机器上都需要安装Docker并且可以连接网络,同时要求Docker版本都必须是1.12及以上,因为老版本不支持Docker Swarm。
    (2)集群管理节点Docker机器的ip地址必须固定,集群中的所有节点都能够访问该管理节点。
    (3)集群节点之间必须使用相应的协议并保证其以下端口号可用:
    *用于集群管理通信的TCP端口2377;
    *TCP和UDP端口7946,用于节点间的通信;
    *UDP端口4789,用于覆盖网络流量。
    集群有三台,分别为manager1(作为管理节点)、worker1(作为工作节点)和worker2(作为工作节点),其ip地址分别如下:
    manager1:192.168.197.143
    worker1:192.168.197.144
    worker2:192.168.197.145
    下面小编来演示ip地址的配置过程以manager1的配置为例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    点击保存之后,在终端查看ip地址是否添加成功
    在这里插入图片描述
    注意:我在添加网络时提示需要超级用户root的授权通过才可以添加,而我输入创建的具有root用户权限的用户密码后提示认证失败,根本原因是超级用户root没有被创建
    在这里插入图片描述
    解决方法如下:
    首先用快捷键crtl+alt+T 打开终端,显示的是用户名@电脑名:~ , 符 号 ,符号 就表示现在处于普通用户权限。
    然后输入:sudo passwd root终端会显示Enter new UNIX password:
    设置root用户密码,按Enter
    终端显示Retype new UNIX password: 再输入一遍
    确定之后终端会显示
    passwd: password updated successfully
    表示root用户成功创建并设置密码
    在这里插入图片描述
    下面我们就可以用刚创建的用户和密码进行认证授权了。
    worker1和worker2的网络配置同上。
    下面对集群的管理节点和工作节点的主机名进行修改需要修改两个文件分别是etc目录下的hosts文件和hostname文件
    2.创建Docker Swarm集群
    (1)在名为manager1的Docker机器上创建Docker Swarm集群
    #docker swarm init --advertise-addr 192.168.197.143

    在这里插入图片描述
    查看Docker Swarm集群节点信息 #docker node ls
    在这里插入图片描述
    3.向Docker Swarm集群添加工作节点
    (1)启动另外两台Docker机器worker1和worker2,分别打开终端窗口,执行向集群中加入工作节点的指令,
    #docker swarm join --token SWMTKN-1-3xddnyp8hkw6w54tolaokvehbgsg77rkp827p7nmkisd3zi8tk-8j4bhzfnq1551bvufo5xk0ddg 192.168.197.143:2377
    在这里插入图片描述
    在这里插入图片描述
    需要特别注意的是,上述指令中的–token参数表示向指定集群中加入工作节点的认证信息。该指令中使用自己在前面创建Docker Swarm集群时返回的向集群中添加工作节点的指令,如果已忘记添加到Docker Swarm集群的指令,可以直接在集群管理节点上执行“docker swarm join-token worker”指令进行查看。
    (2)再次在集群管理节点上使用 docker node ls指令查看集群节点信息,
    在这里插入图片描述
    4.向Docker Swarm集群部署服务
    在Docker Swarm集群中部署服务时,既可以使用Docker Hub上自带的镜像来启动服务,也可以使用自己通过Dockerfile构建的镜像来启动服务。如果使用自己通过的Dockerfile构建的镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。
    下面小编将以使用Docker Hub上自带的alpine镜像为例来部署集群服务
    #docker service create --replicas 1 --name helloworld alpine ping docker.com
    在这里插入图片描述
    —docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务。
    —replicas参数:指定了该服务只有一个副本实例。
    —name参数:指定创建成功后的服务名称为helloworld。
    —ping docker.com指令:表示服务启动后执行的命令。
    Docker Swarm集群中的服务管理与容器操作基本类似,只不过服务管理指令是以“docker service”开头,而容器管理指令是以“docker container”开头。个别指令除外,如–replicas。
    5.查看Docker Swarm集群中的服务
    (1)当服务部署完成后,在管理节点上可以通过docker service ls指令查看当前集群中的服务列表信息
    #docker service ls
    在这里插入图片描述
    (2)可以使用docker service inspect指令,查看部署服务具体详情,具体操作指令如下:
    #docker service inspect helloworld
    在这里插入图片描述
    (3)可以使用docker service ps指令查看指定服务在集群节点上的分配和运行情况。
    #docker service ps helloworld
    在这里插入图片描述
    6.更改Docker Swarm集群服务副本数量
    在集群中部署的服务,如果只运行一个副本,就无法体现出集群的优势,并且一旦该机器或副本崩溃,该服务将无法访问,所以通常一个服务会启动多个服务副本。
    在管理节点manager1上,更改服务副本数量的指令如下:
    #docker service scale helloworld=5
    在这里插入图片描述
    更改完成后,就可以使用docker service ps指令查看这5个服务副本在3个节点上的具体分布和运行情况。
    从上图可以看出,helloworld服务的5个副本实例被随机分配到了manager1、worker1和worker2这三个节点运行,并且他们的状态都是Running,表示服务正常运行。
    需要说明的是,在集群的环境下,服务副本是随机均衡分配到不同节点上的,分配结果会各有不同,另外由于有些镜像较大,所以其他工作节点在拉取镜像运行服务实例时可能需要一定的时间,这时该服务副本就会处于Preparing状态。
    执行docker service ps helloworld指令查看服务的运行情况后,我们还可以在有服务副本的分配的节点机器上使用docker ps指令查看任务运行情况。
    7.删除服务
    对于不需要的服务,我们可以进行删除
    #docker service rm helloworld
    在这里插入图片描述
    在集群管理节点manager1上执行上述删除服务指令后(需要指定删除服务的名称),该服务就会在集群中彻底删除。
    需要说明的是,执行上述指令删除服务后,在集群中有该服务副本运行的节点上,这些服务副本仍需要一定的时间清除,此时我们可以使用docker 查看具体清除情况。
    8.访问服务
    前面部署的服务都没有直接向外部暴露服务端口,外界也无法正常访问服务。我们通过自定义的overlay驱动网络为例来学习集群下的网络管理与服务访问,具体实现过程如下:
    (1)在集群管理节点manager1上,执行docker network ls 查看网络列表,效果如下图所示:
    在这里插入图片描述
    从上图可以看出,与非集群环境下的Docker网络对比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。在集群中发布服务时,如果没有指定网络,那么默认的都是使用名为ingress网络连接的,而实际开发中,则会使用自定义的overlay驱动网络进行服务管理。
    (2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络,
    #docker network create --driver overlay my-multi-host-network
    上述指令以overlay为驱动创建了一个名为my-multi-host-network的网络
    在这里插入图片描述
    在这里插入图片描述
    (3)在集群管理节点manager1上,再次部署服务
    #docker service create --network my-multi-host-network --name my-web --publish 8080:80 --replicas 2 nginx
    在这里插入图片描述
    上述部署的服务的指令中,–network参数用于指定服务使用自定义的overlay驱动网络my-multi-host-network连接;–name参数用于指定服务启动后的名称;–publish(也可以使用-p)参数用于映射对外服务端口;–replicas参数用于指定该服务的副本数量;nginx表示是基于nginx镜像构建的服务。
    (4)在集群管理节点manager1上,使用docker service ps my-web指令查看服务的两个服务副本运行情况
    在这里插入图片描述
    从上图中可以看出两个副本任务被随机分配到了worker1和worker2两台机器上,并已正常运行。
    需要特别注意的是:由于是随机分配,实际操作各有不同,也可能分配到其他两台节点机器上,如manager1和worker1或者manager1和worker2
    (5)外部访问服务
    打开浏览器,使用任意一台的“IP+8080”端口进行服务访问,都可以正常显示,
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    从上图可以看出,当在任意节点上访问服务时,都可以正常访问部署的服务。这是由于集群负载均衡器将请求路由到一个活动容器,从而实现容器内部服务的正常访问,这也体现出了Docker Swarm负载均衡这一特点。
    多学一招:
    我们在ubuntu里面进行编辑时按是上下左右键时变成ABCD,很烦有木有,这时我们可以在终端执行以下这条命令。
    在这里插入图片描述

    展开全文
  • Docker SwarmDocker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。 使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器...
  • 目前,SwarmDocker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。 Swarm 是目前 Docker 官方唯一...
  • docker swarm集群部署

    千次阅读 2019-06-12 20:05:38
    SwarmDocker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集群,它将一群 Docker 宿主机变成 一个单一的,虚拟的主机。Swarm 使用标准的 Docker API接口作为其前端访问入口。 换言之,...
  • 此存储库提供了一些模式示例,说明了如何构建具有真实世界设置所需的所有功能的Docker Swarm集群。 请注意,。 Docker Swarm集群不仅需要运行您的应用程序,还需要更多的东西,它通常至少需要以下附加服务: 第7...
  • Docker Swarm集群搭建教程 接下来通过实例演示一下如何使用 Swarm 来创建安全的集群 实例中包含 3 个管理节点和 3 个工作节点如下图所示可以根据需要自行调整管理节点和工作节点的数量名称和 IP 每个节点都需要安装?...
  • docker swarm集群设置

    2021-05-21 14:18:48
    这里写目录标题docker swarm集群设置1.使用swarm要开通那些端口1)TCP端口2376:2)TCP端口23773)TCP和UDP端口79464)UDP端口47892.docker swarm创建集群3.docker swarm 删除节点 (解散集群)4.docker network创建...
  • docker-swarm-elasticsearch:Elasticsearch Docker映像配置为在docker swarm集群中运行
  • Docker Swarm 模式集群操作API封装和Swarm UI的中间层应用
  • ecs-dockerswarm 使用Docker Compose将EMC的ECS作为多节点Docker容器设置部署到Docker Machine创建的Docker Swarm集群中。 描述 是一个软件定义的云存储平台,它公开了S3,Swift和Atmos端点。 本演练将演示使用...
  • 4个树莓派搭建Docker Swarm集群

    千次阅读 2020-05-25 18:04:59
    4个树莓派搭建Docker Swarm集群树莓派上安装Docker 安装更换国内镜像源运行安装脚本创建Swarm集群初始化Swarm加入管理节点加入工作节点查看节点情况编写测试代码创建Swarm服务客户端连接服务端 树莓派上安装Docker ...
  • Docker swarm集群

    2021-02-12 15:21:28
    目录Docker swarmswarm1)初始化集群2) 部署docker swarm集群网络3)部署一个图形化webUI 界面。4)创建service(服务)5)搭建私有仓库并自定义镜像6)发布一个服务,基于上述镜像7)服务的扩容与缩容 Docker swarm ...
  • 在本文中,我们将讨论一种从群集内的作为Docker Swarm服务创建的容器中转发日志的方法。... 我们将从创建一个Docker Swarm集群开始。 我将假设您已经至少具有Docker Swarm Mode如何工作的基本知识,并...
  • 系统环境为centos,一共有7台机子组成了Docker Swarm集群,现使用NFS作为共享存储。
  • aws_docker_swarm:设置为使用terraform引导docker swarm集群和AWS上的控制器
  • docker Swarm集群

    2021-03-04 22:52:48
    搭建docker swarm集群 机器环境 Swarm集群 IP:192.168.174.147 主机名: manager147 担任角色: swarm manager IP:192.168.174.163 主机名: node163 担任角色: swarm node IP:192.168.174.164 主机名: node164...
  • 此模块创建在Scaleway上启用了TLS的docker swarm集群。 它不会创建网络安全组,使用TLS证书可保护docker访问,但由您决定是否创建网络安全组。 仍要做: 支持选择ssh的密钥文件。 现在,它信任您本地的ssh代理。 ...
  • 虚拟机重新启动之后,发现我的docker swarm集群里的服务访问失败了。 用ifconfig看了一下虚拟机ip地址,果然ip地址变了! 在swarm创建集群的时候,绑定的是地址已经不是本机地址了,当然访问不到服务! 解决办法:...
  • Docker SwarmDocker集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个...
  • 这里只记录的在集群环境中重启单一服务的流程,没有详细说明配置文件。... 编写集群docker-compose.yml文件,包括项目中所设计的服务及代理等,此处不写示例,只讲命令执行流程。 启动erms集群...
  • 文章目录前言Docker swarm简介Docker Swarm 优点相关概念实验环境一.Docker swarm集群的搭建server1server2和server3二.使用swarm集群部署web服务三.弹性伸缩(增加或减少服务数目)四.监控五.滚动更新(灰度发布) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,371
精华内容 5,748
关键字:

dockerswarm集群