Docker-集羣swarm(5)

 Docker集羣的概念html

   羣集是一組運行Docker並加入集羣的計算機。在此以後,您繼續運行您習慣使用的Docker命令,但如今它們由羣集管理器在羣集上執行羣中的機器能夠是物理的或虛擬的。加入羣組後,它們被稱爲節點node

Swarm管理器可使用多種策略來運行容器,例如「最節點的節點」 - 它使用容器填充利用率最低的機器。,它確保每臺機器只得到指定容器的一個實例。您指示swarm管理器在Compose文件中使用這些策略。git

羣集管理器是羣中惟一能夠執行命令的機器,或者受權其餘機器做爲工做者加入羣集工人只是在那裏提供能力,沒有權力告訴任何其餘機器它能作什麼和不能作什麼。github

 

1. 安裝Docker Machine

安裝

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine

  

檢查安裝版本web

[root@docker ~]# docker-machine version
docker-machine version 0.16.0, build 702c267f

  

安裝bash完成腳本docker

Machine存儲庫提供了幾個bash腳本,可添加如下功能:shell

  • 命令完成
  • 一個在shell提示符下顯示活動計算機的函數
  • 一個函數包裝器,它添加一個docker-machine use子命令來切換活動機器
base=https://raw.githubusercontent.com/docker/machine/v0.16.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
  sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done

  使其生效flask

source /etc/bash_completion.d/docker-machine-prompt.bash

要啓用docker-machineshell提示,請添加 $(__docker_machine_ps1)到您的PS1設置中~/.bashrcbash

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

  

安裝VirtualBox網絡

參考: yum安裝VirtualBox

若是是在Vmare的機器中還須要開啓虛擬化

 

docker-machine使用VirtualBox驅動程序建立幾個VM 

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

  

列出計算機並獲取其IP地址

[root@docker ~]# docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.1   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.1   

  

2. 初始化SWARM並添加節點

第一臺機器充當管理器,第二臺是工人節點,它執行管理命令並驗證工做節點加入羣。

您可使用命令向VM發送命令docker-machine ssh指示myvm1 成爲一個swarm管理器docker swarm init並查找以下輸出:

[root@docker ~]#docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node (kx0ou7byih7sjb4hudxearizw) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3ofjl4coq8n9z2bw6t4nnr8zzuhrg7bmlf94f59ybjee74fs0d-dr5g7ec9nzkb2ypj9q3275l3n 192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

  端口2366和2377

  • 2377:羣集管理端口
  • 2376:Docker守護程序端口

將第二臺虛擬機加入集羣

[root@docker ~]#docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3ofjl4coq8n9z2bw6t4nnr8zzuhrg7bmlf94f59ybjee74fs0d-dr5g7ec9nzkb2ypj9q3275l3n 192.168.99.100:2377"
This node joined a swarm as a worker.

  

查看集羣中的節點

[root@docker ~]#docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
kx0ou7byih7sjb4hudxearizw *   myvm1               Ready               Active              Leader              18.09.1
yqg18tj1ujx13eb47sb10ozvk     myvm2               Ready               Active                                  18.09.1

  

離開羣,在須要離開的節點運行

docker swarm leave

  

3. 在集羣中部署應用程序

爲管理節點(myvm1)配置shell

到目前爲止,您已經將Docker命令包裝在docker-machine ssh與VM通訊中。另外一種選擇是運行docker-machine env <machine>以獲取並運行一個命令,該命令將當前shell配置爲與VM上的Docker守護程序通訊。此方法適用於下一步,由於它容許您使用本地docker-compose.yml文件「遠程」部署應用程序,而無需將其複製到任何位置。

[root@docker ~]#docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell: 
# eval $(docker-machine env myvm1)
[root@docker ~]#eval $(docker-machine env myvm1)
[root@docker ~ [myvm1]]#docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.1   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.1 

  能夠看見myvm1變成了活動狀態

 

取消當前shell

eval $(docker-machine env myvm1)

  

在swarm管理器上部署應用程序
[root@docker ~ [myvm1]]#docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web

 

能夠經過下面的命令查看服務已經分佈在myvm1和myvm2上了

[root@docker ~ [myvm1]]#docker stack ps getstartedlab
ID                  NAME                  IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
r2bg0k9j68br        getstartedlab_web.1   scottcho/flask:v1   myvm1               Running             Running 3 minutes ago                       
kumrzfmznjmq        getstartedlab_web.2   scottcho/flask:v1   myvm2               Running             Running 2 minutes ago                       
1w3p5qe3fbhf        getstartedlab_web.3   scottcho/flask:v1   myvm1               Running             Running 3 minutes ago                       
bxlvev660m1o        getstartedlab_web.4   scottcho/flask:v1   myvm2               Running             Running 2 minutes ago                       
62jts8h2qplt        getstartedlab_web.5   scottcho/flask:v1   myvm2               Running             Running 2 minutes ago      

  

訪問服務

[root@docker ~ [myvm1]]#curl http://192.168.99.100:4000
<h3>Hello World!</h3><b>Hostname:</b> f612eb9ae8f3<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>[root@docker ~ [myvm1]]#curl http://192.168.99.101:4000
<h3>Hello World!</h3><b>Hostname:</b> 37e0a0449988<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>[root@docker ~ 

  

內部網絡圖

 

 中止和啓動VM

 

docker-machine stop myvm2
docker-machine start myvm2
相關文章
相關標籤/搜索