• 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来启用虚拟机
  • 相关阅读:
    Spring Boot (20) 拦截器
    Spring Boot (19) servlet、filter、listener
    Spring Boot (18) @Async异步
    Spring Boot (17) 发送邮件
    Spring Boot (16) logback和access日志
    Spring Boot (15) pom.xml设置
    Spring Boot (14) 数据源配置原理
    Spring Boot (13) druid监控
    Spring boot (12) tomcat jdbc连接池
    Spring Boot (11) mybatis 关联映射
  • 原文地址:https://www.cnblogs.com/wswang/p/9288105.html
Copyright © 2020-2023  润新知