Docker集羣的概念html
羣集是一組運行Docker並加入集羣的計算機。在此以後,您繼續運行您習慣使用的Docker命令,但如今它們由羣集管理器在羣集上執行。羣中的機器能夠是物理的或虛擬的。加入羣組後,它們被稱爲節點。node
Swarm管理器可使用多種策略來運行容器,例如「最節點的節點」 - 它使用容器填充利用率最低的機器。,它確保每臺機器只得到指定容器的一個實例。您指示swarm管理器在Compose文件中使用這些策略。git
羣集管理器是羣中惟一能夠執行命令的機器,或者受權其餘機器做爲工做者加入羣集。工人只是在那裏提供能力,沒有權力告訴任何其餘機器它能作什麼和不能作什麼。github
$ 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
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-machine
shell提示,請添加 $(__docker_machine_ps1)
到您的PS1
設置中~/.bashrc
。bash
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
安裝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
第一臺機器充當管理器,第二臺是工人節點,它執行管理命令並驗證工做節點加入羣。
您可使用命令向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
將第二臺虛擬機加入集羣
[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
到目前爲止,您已經將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)
[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 ~
內部網絡圖
docker-machine stop myvm2 docker-machine start myvm2