• docker练习-群


    了解Swarm集群

    群集是一组运行Docker并加入群集的计算机。在此之后,继续运行使用的Docker命令,但现在它们由群集管理器在群集上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点。

    Swarm管理器可以使用多种策略来运行容器,例如“最节点的节点” - 它使用容器填充利用率最低的机器。或“全局”,它确保每台机器只获得指定容器的一个实例。指示swarm管理器在Compose文件中使用这些策略,就像您已经使用的那样。

    群集管理器是群中唯一可以执行命令的机器,或授权其他机器作为工作者加入群集。工人只是在那里提供能力,并且没有权力告诉任何其他机器它能做什么和不能做什么。

    到目前为止,您一直在本地计算机上以单主机模式使用Docker。但是Docker也可以切换到swarm模式,这就是使用群集的能力。立即启用群集模式使当前计算机成为群集管理器。从那时起,Docker就会运行您在管理的swarm上执行的命令,而不仅仅是在当前机器上。

    添加 :

    创建群

    在此过程结束时,所有三个Docker主机将连接到群集,并将使用名为的覆盖网络连接在一起ingress

    1. master。初始化群。如果主机只有一个网络接口,则该--advertise-addr标志是可选的。

      $ docker swarm init --advertise-addr=<IP-ADDRESS-OF-MANAGER>  //网卡地址
      

      记下打印的文本,因为它包含您将用于加入worker-1和使用worker-2swarm 的标记。将令牌存储在密码管理器中是个好主意。

    2. worker-1,加入群。如果主机只有一个网络接口,则该--advertise-addr标志是可选的。

      $ docker swarm --join --token <TOKEN> 
        --advertise-addr <IP-ADDRESS-OF-WORKER-1>     //节点1网卡地址
        <IP-ADDRESS-OF-MANAGER>:2377                   //master网卡地址
      
    3. worker-2,加入群。如果主机只有一个网络接口,则该--advertise-addr标志是可选的。

      $ docker swarm --join --token <TOKEN> 
        --advertise-addr <IP-ADDRESS-OF-WORKER-2>     //节点2网卡地址
        <IP-ADDRESS-OF-MANAGER>:2377
      
    4. manager,列出所有的节点。此命令只能从经理完成。

      $ docker node ls
      
      ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
      d68ace5iraw6whp7llvgjpu48 *   ip-172-31-34-146    Ready               Active              Leader
      nvp5rwavvb8lhdggo8fcf7plg     ip-172-31-35-151    Ready               Active
      ouvx2l7qfcxisoyms8mtkgahw     ip-172-31-36-89     Ready               Active
      

      您还可以使用该--filter标志按角色进行过滤:

      $ docker node ls --filter role=manager
      
      ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
      d68ace5iraw6whp7llvgjpu48 *   ip-172-31-34-146    Ready               Active              Leader
      
      $ docker node ls --filter role=worker
      
      ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
      nvp5rwavvb8lhdggo8fcf7plg     ip-172-31-35-151    Ready               Active
      ouvx2l7qfcxisoyms8mtkgahw     ip-172-31-36-89     Ready               Active
      
    5. node1和node2列出Docker网络manager,并注意到它们现在都有一个名为的覆盖网络和一个名为的网桥。此处仅显示列表:worker-1worker-2ingressdocker_gwbridgemanager

      $ docker network ls
      
      NETWORK ID          NAME                DRIVER              SCOPE
      495c570066be        bridge              bridge              local
      961c6cae9945        docker_gwbridge     bridge              local
      ff35ceda3643        host                host                local
      trtnl4tqnc3n        ingress             overlay             swarm
      c8357deec9cb        none                null                local

    设置群

    群由多个节点组成,可以是物理或虚拟机。基本概念很简单:

    docker swarm init  以启用swarm模式并使当前计算机成为群集管理器

    docker swarm join  在其他计算机上运行 以使它们作为工作者加入群组

    1 .使用VM快速创建一个双机群集并将其转换为群集

    您需要一个可以创建虚拟机(VM)的虚拟机管理程序,因此计算机操作系统安装Oracle VirtualBox

    现在,docker-machine使用VirtualBox驱动程序创建几个VM :

    docker-machine create --driver virtualbox myvm1
    docker-machine create --driver virtualbox myvm2





    列出虚拟机并获取其IP地址

    docker-machine ls

    NAME   ACTIVE  DRIVER   STATE     URL          SWARM   DOCKER   ERRORS
    default    -       virtualbox    Running   tcp://192.168.99.100:2376        v18.05.0-ce
    myvm1    -      virtualbox   Running    tcp://192.168.99.101:2376        v18.05.0-ce
    myvm2    -      virtualbox   Running    tcp://192.168.99.102:2376       v18.05.0-ce

    补充:

    docker-machine rm myvm1 --force  //强制删除节点

    2. 初始化SWARM并添加节点

    第一台机器充当管理器,执行管理命令并验证工作人员加入群,第二台是工作人员。

    可以使用命令向VM发送命令docker-machine ssh。指示myvm1 成为一个swarm管理器docker swarm init并查找如下输出:

    PS C:Program FilesDocker Toolbox> docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.103"  

    docker swarm join --token SWMTKN-1-1571g8tuo3h2cy8jz5h0ya1hc5okd1nlr9b8ksi61ctul1ykxz-4nlejv9ttye9lklx89a8b6clu 192.168.99.103:2377

    myvm2 将新群组作为工作者加入:

    PS C:Program FilesDocker Toolbox> docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-1571g8tuo3h2cy8jz5h0ya1hc5okd1nlr9b8ksi61ctul1ykxz-4nlejv9ttye9lklx89a8b6clu 192.168.99.103:2377"

    补充:

    PS C:Program FilesDocker Toolbox> docker swarm leave --force //强制推出群

    注意:

    端口2377和2376

    始终运行docker swarm initdocker swarm join使用端口2377(群集管理端口),或根本没有端口,并使其采用默认值。

    docker-machine ls包含端口2376 返回的计算机IP地址,即Docker守护程序端口。请勿使用此端口,否则 可能会遇到错误

    使用SSH时遇到问题?试试--native-ssh标志

    Docker Machine 可以使用自己系统的SSH,如果由于某种原因在向Swarm管理器发送命令时遇到问题。只需--native-ssh在调用ssh命令时指定 标志:

    docker-machine --native-ssh ssh myvm1 ...

    docker node ls在管理器上运行以查看此群中的节点:

    PS C:Program FilesDocker Toolbox> docker-machine ssh myvm1 "docker node ls"
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
    brtu9urxwfd5j0zrmkubhpkbd     myvm2               Ready               Active
    rihwohkh3ph38fhillhhb84sk *   myvm1               Ready               Active              Leader

    如果要重新开始,可以docker swarm leave 从每个节点运行

    3.在群集群集上部署应用程序

    docker-machine为swarm管理器配置shell

    windos10的SHELL环境:

    PS C:Program FilesDocker Toolbox> docker-machine env myvm1
    $Env:DOCKER_TLS_VERIFY = "1"
    $Env:DOCKER_HOST = "tcp://192.168.99.101:2376"
    $Env:DOCKER_CERT_PATH = "C:UsersAdministrator.dockermachinemachinesmyvm1"
    $Env:DOCKER_MACHINE_NAME = "myvm1"
    $Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"
    # Run this command to configure your shell:
    # & "C:Program FilesDocker Toolboxdocker-machine.exe" env myvm1 | Invoke-Expression

    运行给定命令以配置要与之通信的shell myvm1:
    PS C:Program FilesDocker Toolbox> docker-machine.exe  env myvm1 | Invoke-Expression

    MAC或LINUX上的DOCKER机器SHELL环境

    运行docker-machine env myvm1以获取命令以配置要与之通信的shell myvm1

    $ docker-machine env myvm1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.100:2376"
    export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"
    export DOCKER_MACHINE_NAME="myvm1"
    # Run this command to configure your shell:
    # eval $(docker-machine env myvm1)
    

    运行给定命令以配置要与之通信的shell myvm1

    eval $(docker-machine env myvm1)
    

    运行docker-machine ls以验证它myvm1现在是活动计算机,如旁边的星号所示。

    $ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.2-ce
    myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.2-ce
    

     

    4. 在群集管理器上部署应用程序

    运行以下命令以部署应用程序myvm1

    docker stack deploy -c docker-compose.yml getstartedlab

    注意:如果的映像存储在私有注册表而不是Docker Hub上,则需要使用登录docker login <your-registry>,然后需要将--with-registry-auth标志添加到上述命令中。例如:

    docker login registry.example.com
    
    docker stack deploy --with-registry-auth -c docker-compose.yml getstartedlab
    

    这会使用加密的WAL日志将登录令牌从本地客户端传递到部署服务的swarm节点。有了这些信息,节点就可以登录注册表并提取图像。

    $ docker stack ps getstartedlab
    
    ID            NAME                  IMAGE                   NODE   DESIRED STATE
    jq2g3qp8nzwx  getstartedlab_web.1   gordon/get-started:part2  myvm1  Running
    88wgshobzoxl  getstartedlab_web.2   gordon/get-started:part2  myvm2  Running
    vbb1qbkb0o2z  getstartedlab_web.3   gordon/get-started:part2  myvm2  Running
    ghii74p9budx  getstartedlab_web.4   gordon/get-started:part2  myvm1  Running
    0prmarhavs87  getstartedlab_web.5   gordon/get-started:part2  myvm2  Running

     

    访问群集

    你可以从IP地址来访问你的应用程序要么 myvm1myvm2

    您创建的网络在它们之间共享并进行负载平衡。运行 docker-machine ls以获取VM的IP地址,并在浏览器上访问其中任何一个,点击刷新(或只是curl它们)。

    有五种可能的容器ID都是随机循环的,这表明了负载平衡。

    两个IP地址工作的原因是群中的节点参与入口路由网格。这可确保部署在swarm中某个端口的服务始终将该端口保留给自身,无论实际运行容器的是哪个节点。下面是一个图表,说明在三节点群上的my-web端口8080上发布的服务的路由网格如何显示:

    请记住,要在群集中使用入口网络,需要在启用群集模式之前在群集节点之间打开以下端口:

    • 端口7946 TCP / UDP用于容器网络发现。
    • 端口4789 UDP用于容器入口网络。

     

    迭代和扩展您的应用程序

    通过更改docker-compose.yml文件来扩展应用程序。

    通过编辑代码更改应用程序行为,然后重建并推送新图像。

    在任何一种情况下,只需docker stack deploy再次运行即可部署这些更改。

    可以使用docker swarm join您使用的相同命令将任何机器(物理或虚拟)加入此群myvm2,并将容量添加到群集中。只需在docker stack deploy之后运行,应用就可以利用新资源。

     

    清理并重新启动

    堆栈和群

    你可以拆掉堆栈docker stack rm。例如:

    docker stack rm getstartedlab

     

    取消设置docker-machine shell变量设置

    您可以docker-machine使用给定命令在当前shell中取消设置环境变量。

    Linux上,命令是:

      eval $(docker-machine env -u)
    

    在Windows上,命令是:

      PS C:Program FilesDocker Toolbox> docker-machine.exe env -u | Invoke-Expression

     

    重启Docker机器

    如果关闭本地主机,Docker计算机将停止运行。

    $ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
    myvm1   -        virtualbox   Stopped                 Unknown
    myvm2   -        virtualbox   Stopped                 Unknown
    

    要重新启动已停止的计算机,请运行:

    docker-machine start <machine-name>
    

     

     
  • 相关阅读:
    Hdu 5595 GTW likes math
    HNOI2002 营业额统计(Splay Tree)
    hdu 5592 BestCoder Round #65(树状数组)
    hdu 5591 BestCoder Round #65(博弈)
    hdu5586 BestCoder Round #64 (div.2)
    NoSQL
    什么是关系型数据库
    关系型数据库与NOSQL
    关系型数据库
    centos6.x下安装eclipse
  • 原文地址:https://www.cnblogs.com/wwchihiro/p/9294751.html
Copyright © 2020-2023  润新知