zoukankan      html  css  js  c++  java
  • Docker 入门(Mac环境)- part 4 swarms

    part-4 Swarms

    简介

    这一节主要是介绍一下如何在集群模式下部署docker应用;集群的概念很好理解了,多台机器共同完成一项任务;和Hadoop那些集群一样,docker也相当于有一个管理机,下面有一些worker,docker集群的部署方式也类似。

    创建集群所需机器

    所谓集群,肯定是多个机器,要在本地实现集群的效果,只能用虚拟机了;提到虚拟机,可以使用virtualbox创建虚拟机,但是并不需要安装virtualbox之后在那点鼠标创建xx虚拟机,使用docker的命令,以virtualbox为驱动就可以创建了;过程大致如下:

    • 创建2台虚拟机
    docker-machine create --driver virtualbox myvm1
    docker-machine create --driver virtualbox myvm2
    
    • 使用docker-machine ls可以查看虚拟机列表,效果如下
    ➜ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
    myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce
    

    初始化swarm,添加节点

    机器已经创建好了,就可以创建集群了,大致步骤如下:

    • 先将其中一个设置为管理机(leader)
    ➜ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
    Swarm initialized: current node (erobf751l09mmidt60y8idg6i) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-5shucnjzwdjwyzpquec8k8obvauasnvlc7g81da84ucv6y6um5-crfqd1by0v3693jov5u24jf40 192.168.99.100:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    • 依照上述提示,将另外一台机器设置为worker
    ➜ docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-5shucnjzwdjwyzpquec8k8obvauasnvlc7g81da84ucv6y6um5-crfqd1by0v3693jov5u24jf40 192.168.99.100:2377"
    This node joined a swarm as a worker.
    
    • 查看集群状态,需要登录到管理机上查看
    ➜ docker-machine ssh myvm1 "docker node ls"
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    erobf751l09mmidt60y8idg6i *   myvm1               Ready               Active              Leader              18.05.0-ce
    t7dioehz2db7wcs6lz4gzcg2y     myvm2               Ready               Active                                  18.05.0-ce
    
    • 若想让机器退出集群,使用docker-machi ssh myvm2 "docker swarm leave"

    在集群上部署docker应用

    配置docker-machine env

    之前与vm1/vm2通话的方式比较麻烦,现在可以通过docker-machine env <machine>来直接沟通,与docker-machine ssh的区别是:前者可以使用本地的docker-compose.yml文件来配置集群,而不用将文件拷贝过去。大致方式如下:

    ➜ docker-machine env myvm1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.100:2376"
    export DOCKER_CERT_PATH="/Users/wang/.docker/machine/machines/myvm1"
    export DOCKER_MACHINE_NAME="myvm1"
    # Run this command to configure your shell:
    # eval $(docker-machine env myvm1)
    ➜ eval $(docker-machine env myvm1)
    ➜ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
    myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce
    
    在swarm管理机上部署应用
    • 通过了上一步的操作,实际上相当于可以控制myvm1了,然后就可以部署app了,方式如下:
    ➜ docker stack deploy -c docker-compose.yml getstartedlab
    Creating network getstartedlab_webnet
    Creating service getstartedlab_web
    
    • 可以通过docker stack ps xxx来查看是否启动成功了,如下:
    ➜  docker_file docker stack ps getstartedlab 
    zi9r49lihpf0        getstartedlab_web.1       btchild/get-started:part-2   myvm2               Running             Preparing about a minute ago
    vc3z9spbwjhk        getstartedlab_web.2       btchild/get-started:part-2   myvm2               Running             Preparing about a minute ago
    s2fuh8z5leto        getstartedlab_web.3       btchild/get-started:part-2   myvm1               Running             Running about a minute ago
    nhd3cpud5k28        getstartedlab_web.4       btchild/get-started:part-2   myvm1               Running             Running 12 seconds ago
    n3tcr1k8ieen        getstartedlab_web.5       btchild/get-started:part-2   myvm1               Running             Running about a minute ago
    
    • 然后可以通过浏览器访问http://192.168.99.100:4000/就可以看到结果了,也可以通过http://192.168.99.101:4000/来查看,就相当于达到了负载均衡的效果,也实现了集群的操作
    • 另外,可通过docker-machine scp file_name machine_name来实现拷贝
    • 停用应用
    ➜  docker_file docker stack rm getstartedlab
    Removing service getstartedlab_web
    Removing network getstartedlab_webnet
    
    • 离开swarm的管理机
    ➜  docker_file eval $(docker-machine env -u)
    
    重启vm
    • 可以通过docker-machine stop myvm1来停用虚拟机
    • 通过docker-machine start myvm1来启用虚拟机
  • 相关阅读:
    拖拽更改窗口大小
    一个窗口移动时,另一个窗口跟随移动
    xcode使用技巧
    同一个解决方案中,多个项目间相互引用,无法打开源文件
    截图时窗口自动识别
    C++使用sqlite时,中文字符显示乱码问题
    sqlite3配置与使用
    duilib控件与属性说明
    xml文件编写
    线程及安全相关
  • 原文地址:https://www.cnblogs.com/wswang/p/9288105.html
Copyright © 2011-2022 走看看