zoukankan      html  css  js  c++  java
  • Docker Swarm介绍

    1 什么是swarm
    Swarm是Docker公司推出的docker集群管理平台,它将一群Docker主机变成了一台单一的虚拟Docker主机。
    Swarm使用标准的Docker API接口,因此,任何支持Docker API的工具都能使用Swarm,包括Docker Compose、Docker Machine、Jenkins等等。
    Docker 1.12版本之后,Swarm已经包含在Docker引擎中了,不需要再手动安装Swarm相关的组件了。
    Swarm遵循可插拔原则(swap, plug, and play),它的后台引擎是可替换的,在大规模生产环境中,可以将Swarm后端替换成更强大的后端(比如Mesos)。

    2 swarm中的几个概念
    (1)Node
    Swarm节点,是运行Docker引擎的一个实例,通常是一台物理服务器或者是云服务器。节点有两类:
    worker node:工作节点,接收和执行任务,运行具体的服务。
    manager node:管理节点,用于执行集群命令,调度任务等等。默认情况下管理节点同时也具有工作节点的功能,可以接收和执行任务。

    (2)Service
    集群中具体要运行的容器。

    (3)Task
    集群中要执行的命令。

    3 Swarm常用命令
    (1)集群和节点操作

    使用以下3台服务器演示swarm命令:

    ecs-dev-07
    ecs-dev-08
    ecs-dev-09

    [root@ecs-dev-07 ~]# docker swarm init
    Swarm initialized: current node (w45oeu9569u5vcp0f2i0z26xc) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-3qhvwlzbh084t0xygh7semasver547auakxdo5xzdwp5mt91vk-10eep4z6ic54ws8zc7r6aqmhp 172.19.141.21:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    # 将从节点加入集群
    docker swarm join --token SWMTKN-1-2v0mg19ouxu6svqdc1ufbwgz7tfrd9f0uhwqeriogygdcovowx-4d558q9qb51429j27at6teq2j 172.19.141.21:2377
    
    # 如果希望从节点作为manager角色加入集群,则主节点上运行以下命令,重新创建token
    [root@ecs-dev-07 ~]# docker swarm join-token manager
    To add a manager to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-3qhvwlzbh084t0xygh7semasver547auakxdo5xzdwp5mt91vk-2zhuddonlxe1m0d4agpqzopyw 172.19.141.21:2377
    
    # 查看集群信息
    [root@ecs-dev-07 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    w45oeu9569u5vcp0f2i0z26xc *   ecs-dev-07          Ready               Active              Leader              19.03.5
    x6io92f7wb9sb9ivq0hrr0xja     ecs-dev-08          Ready               Active              Reachable           19.03.4
    vsf9pkvxai5m3184evskl2dsc     ecs-dev-09          Ready               Active              Reachable           19.03.5
    
    # 将leader节点停掉,可以看到原来的leader节点状态变成了Unreachable,另外一台主机的角色变成了Leader
    [root@ecs-dev-08 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    w45oeu9569u5vcp0f2i0z26xc     ecs-dev-07          Unknown             Active              Unreachable         19.03.5
    x6io92f7wb9sb9ivq0hrr0xja *   ecs-dev-08          Unknown             Active              Leader              19.03.4
    vsf9pkvxai5m3184evskl2dsc     ecs-dev-09          Unknown             Active              Reachable           19.03.5
    
    # 将当前节点从集群中删除
    docker swarm leave -f

     (2)服务操作

    # 创建一个具有2个实例的nginx集群
    docker service create --name nginx --replicas 2 --network actinia nginx:1.15
    
    # 查看所有的服务列表
    [root@ecs-dev-08 ~]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    nyyub2v4xt6s        nginx               replicated          2/2                 nginx:1.15
    
    # 查看nginx服务的具体运行情况
    [root@ecs-dev-08 ~]# docker service ps nginx 
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    rb4jd9t95hun        nginx.1             nginx:1.15          ecs-dev-08          Running             Running 45 seconds ago                       
    s5ljg8d2nf38        nginx.2             nginx:1.15          ecs-dev-07          Running             Running 46 seconds ago
    
    # 将nginx实例数量变成3个
    [root@ecs-dev-08 ~]# docker service scale nginx=3
    nginx scaled to 3
    overall progress: 3 out of 3 tasks 
    1/3: running   [==================================================>] 
    2/3: running   [==================================================>] 
    3/3: running   [==================================================>] 
    verify: Service converged 
    
    # 再次查看nginx服务的运行情况,可以看到当前nginx服务数量已经变成了3个
    [root@ecs-dev-08 ~]# docker service ps nginx 
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
    rb4jd9t95hun        nginx.1             nginx:1.15          ecs-dev-08          Running             Running 2 minutes ago                       
    s5ljg8d2nf38        nginx.2             nginx:1.15          ecs-dev-07          Running             Running 2 minutes ago                       
    r6ptddryp0pq        nginx.3             nginx:1.15          ecs-dev-09          Running             Running 8 seconds ago
    
    # 还可以使用更强大的docker service update命令,对服务进行更多的修改,比如服务的镜像版本、重启策略、环境变量等等。
    # 例如,修改服务的镜像版本
    docker service update --image nginx:1.14 nginx
    
    # 再次查看服务运行情况
    # 可以看到1.15版本的nginx服务已经停掉,当前运行的是1.14版本的nginx服务
    [root@ecs-dev-08 ~]# docker service ps nginx 
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                 ERROR               PORTS
    xcrxhdhuuajo        nginx.1             nginx:1.14          ecs-dev-09          Running             Running about a minute ago                        
    rb4jd9t95hun         \_ nginx.1         nginx:1.15          ecs-dev-08          Shutdown            Shutdown 5 minutes ago                            
    afec10q894s9        nginx.2             nginx:1.14          ecs-dev-07          Running             Running 56 seconds ago                            
    s5ljg8d2nf38         \_ nginx.2         nginx:1.15          ecs-dev-07          Shutdown            Shutdown about a minute ago
    

    (3)网络操作

    Docker Swarm使用overlay类型的网络。在同一个overlay网络中的容器,即使是在不同的宿主机上,互相之间也能通讯。不同的overlay网络内的容器是相互隔离的。
    overlay网络为每一个服务提供了一个虚拟IP(VIP)和一个域名,同一个网络中的容器可以互相通过虚拟IP和域名进行访问。

    # 创建网络
    [root@ecs-dev-07 ~]# docker network create --subnet 172.30.0.0/16 --gateway 172.30.0.1 --driver overlay --attachable actinia
    
    # 查看网络
    [root@ecs-dev-07 ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    giepr8kjiq1z        actinia             overlay             swarm
    8c85d1fdd11c        bridge              bridge              local
    90e4ef8ecdf3        docker_gwbridge     bridge              local
    e945204eb642        host                host                local
    ho2oi9uyks7h        ingress             overlay             swarm
    3c325566a9c8        none                null                local
    
  • 相关阅读:
    Xdebug
    单点登录
    一个Https网站发送Http的 ajax请求的解决方法
    js关闭微信浏览器页面
    标准的身份证验证(第18位校验码)
    Redis 更新(set) key值 会重置过期时间问题
    PHP 报错:Deprecated: Methods with the same name as their class will not be constructor...
    php防sql注入
    web开发原则
    fopen()函数
  • 原文地址:https://www.cnblogs.com/lasdaybg/p/12180224.html
Copyright © 2011-2022 走看看