1. 程式人生 > >Docker 入門(Mac環境)- part 4 swarms

Docker 入門(Mac環境)- part 4 swarms

ken token shu http code his ade owin -s

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來啟用虛擬機

Docker 入門(Mac環境)- part 4 swarms