?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
1:概況介紹
2:集裝箱
3:服務(wù)
4:成群
5:堆疊
6:部署應(yīng)用程序
安裝Docker版本1.13或更高版本。
按照第3部分的先決條件中所述獲取Docker撰寫。
獲取預(yù)裝Docker for Mac和Docker for Windows的 Docker Machine,但在Linux系統(tǒng)上需要直接安裝它。在沒有Hyper-V的 Windows 10系統(tǒng)之前以及Windows 10 Home中,使用Docker Toolbox。
閱讀第1部分中的方向。
學(xué)習(xí)如何在第2部分中創(chuàng)建容器。
確保您已經(jīng)發(fā)布了friendlyhello
你創(chuàng)造的形象將其推送到注冊表我們將在這里使用共享的圖像。
確保你的圖像作為一個部署的容器。運行此命令,在您的信息開槽username
,repo
和tag
:docker run -p 80:80 username/repo:tag
,然后訪問http://localhost/
。
有一份你的docker-compose.yml
從第3部分手巧。
在第3部分,你拿了一個你在里面寫的應(yīng)用程序第二部分,并定義了如何在生產(chǎn)中運行,將其轉(zhuǎn)化為服務(wù),在流程中將其擴(kuò)展到5倍。
在第4部分中,您將這個應(yīng)用程序部署到一個集群上,在多臺機(jī)器上運行它。多容器、多機(jī)器應(yīng)用程序通過將多臺機(jī)器連接到一個名為蜂群...
Swarm是一組運行Docker并加入到集群中的機(jī)器。發(fā)生這種情況后,您將繼續(xù)運行您習(xí)慣的Docker命令,但現(xiàn)在它們將由群集管理器在群集上執(zhí)行。群體中的機(jī)器可以是物理的或虛擬的。加入群體后,他們被稱為節(jié)點。
群管理器可以使用幾種策略來運行容器,比如“最空的節(jié)點”--即用容器填充利用率最低的機(jī)器。或“全局”,它確保每臺機(jī)器都得到指定容器的一個實例。您指示群管理器在撰寫文件中使用這些策略,就像您已經(jīng)使用過的策略一樣。
群管理器是群集中唯一能夠執(zhí)行命令或授權(quán)其他機(jī)器加入群集的機(jī)器。工人.工人只是為了提供能力,沒有權(quán)力告訴任何其他機(jī)器它能做什么和不能做什么。
到目前為止,您一直在本地計算機(jī)上以單一主機(jī)模式使用Docker。但是碼頭工人也可以群模式,這就是為什么可以使用蜂群。啟用群集模式立即使當(dāng)前機(jī)器成為群管理器。從那時起,Docker將在您正在管理的群集上運行命令,而不僅僅是在當(dāng)前的機(jī)器上運行。
群集由多個節(jié)點組成,可以是物理的,也可以是虛擬機(jī)?;靖拍罘浅:唵危哼\行docker swarm init
若要啟用群集模式并使當(dāng)前機(jī)器成為群集管理器,請運行docker swarm join
在其他機(jī)器上,讓它們作為工人加入蜂群。在下面選擇一個選項卡,看看這在不同的上下文中是如何進(jìn)行的。我們將使用VM快速創(chuàng)建一個雙機(jī)集群,并將其轉(zhuǎn)化為一個集群。
本地VM(Mac,Linux,Windows 7和8)
本地虛擬機(jī)(Windows 10 / Hyper-V)
首先,您需要一個可以創(chuàng)建VM的虛擬機(jī)管理程序,所以安裝VirtualBox你機(jī)器的操作系統(tǒng)。
注:如果您在安裝了Hyper-V的Windows系統(tǒng)上,如Windows 10,則不需要安裝VirtualBox,而應(yīng)該使用Hyper-V。通過單擊上面的Hyper-V選項卡查看超級V系統(tǒng)的說明。
現(xiàn)在,使用docker-machine
,使用VirtualBox驅(qū)動程序:
$ docker-machine create --driver virtualbox myvm1 $ docker-machine create --driver virtualbox myvm2
你現(xiàn)在有兩個虛擬機(jī)創(chuàng)建,命名myvm1
和myvm2
(如docker-machine ls
顯示)。第一個將作為經(jīng)理,執(zhí)行docker
命令和認(rèn)證工人加入群體,第二個將是一個工人。
您可以使用docker-machine ssh
.指示myvm1
成為一名群經(jīng)理docker swarm init
你會看到這樣的輸出:
$ docker-machine ssh myvm1 "docker swarm init"Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command: docker swarm join \ --token <token> \ <ip>:<port>
有關(guān)于需要使用的錯誤
--advertise-addr
?myvm1
通過運行復(fù)制IP地址docker-machine ls
,然后docker swarm init
再次運行該命令,使用該IP并指定port2377
(swarm連接的端口)--advertise-addr
。例如:docker-machine ssh myvm1“docker swarm init --advertise-addr 192.168.99.100:2377”
如您所見,對docker swarm init
包含預(yù)先配置的docker swarm join
命令,以便在要添加的任何節(jié)點上運行。復(fù)制此命令,并將其發(fā)送到myvm2
通孔docker-machine ssh
有myvm2
加入你的新蜂群作為一個工人:
$ docker-machine ssh myvm2 "docker swarm join \ --token <token> \ <ip>:<port>"This node joined a swarm as a worker.
恭喜你,你創(chuàng)造了你的第一群。
注::您也可以運行
docker-machine ssh myvm2
沒有附加任何命令來打開該VM上的終端會話。類型exit
當(dāng)您準(zhǔn)備返回到主機(jī)shell提示符時。以這種方式粘貼Join命令可能更容易。
使用ssh
連接到(docker-machine ssh myvm1
),并運行docker node ls
在該群查看節(jié)點:
docker@myvm1:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader
類型exit
從機(jī)器里出來。
或者,將命令包裝在docker-machine ssh
以避免直接登錄或退出。例如:
docker-machine ssh myvm1 "docker node ls"
首先,快速創(chuàng)建一個虛擬交換機(jī)供您的VM共享,這樣它們就能夠相互連接。
發(fā)射超V管理器
點擊虛擬開關(guān)管理器在右邊的菜單中
點擊創(chuàng)建虛擬開關(guān)類型外部
給它起個名字myswitch
,并選中此復(fù)選框以共享主機(jī)的活動網(wǎng)絡(luò)適配器
現(xiàn)在,使用我們的節(jié)點管理工具創(chuàng)建幾臺虛擬機(jī),docker-machine
*
$ docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 $ docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2
你現(xiàn)在有兩個虛擬機(jī)創(chuàng)建,命名myvm1
和myvm2
(如docker-machine ls
顯示)。第一個將作為經(jīng)理,執(zhí)行docker
命令和認(rèn)證工人加入群體,第二個將是一個工人。
您可以使用docker-machine ssh
.指示myvm1
成為一名群經(jīng)理docker swarm init
你會看到這樣的輸出:
$ docker-machine ssh myvm1 "docker swarm init"Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command: docker swarm join \ --token <token> \ <ip>:<port>
有關(guān)于需要使用的錯誤
--advertise-addr
?myvm1
通過運行復(fù)制IP地址docker-machine ls
,然后docker swarm init
再次運行該命令,使用該IP并指定port2377
(swarm連接的端口)--advertise-addr
。例如:docker-machine ssh myvm1“docker swarm init --advertise-addr 192.168.99.100:2377”
如您所見,對docker swarm init
包含預(yù)先配置的docker swarm join
命令,以便在要添加的任何節(jié)點上運行。復(fù)制此命令,并將其發(fā)送到myvm2
通孔docker-machine ssh
有myvm2
加入你的新蜂群作為一個工人:
$ docker-machine ssh myvm2 "docker swarm join \ --token <token> \ <ip>:<port>"This node joined a swarm as a worker.
恭喜你,你創(chuàng)造了你的第一群。
注::您也可以運行
docker-machine ssh myvm2
沒有附加任何命令來打開該VM上的終端會話。類型exit
當(dāng)您準(zhǔn)備返回到主機(jī)shell提示符時。以這種方式粘貼Join命令可能更容易。
使用ssh
連接到(docker-machine ssh myvm1
),并運行docker node ls
在該群查看節(jié)點:
docker@myvm1:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader
類型exit
從機(jī)器里出來。
或者,將命令包裝在docker-machine ssh
以避免直接登錄或退出。例如:
docker-machine ssh myvm1 "docker node ls"
困難的部分結(jié)束了。現(xiàn)在,您只需重復(fù)您在其中使用的過程。第3部分部署到你的新蜂群上。記住,只有一群經(jīng)理喜歡myvm1
執(zhí)行Docker命令;工作人員只是為了容量。
使用以下命令docker-compose.yml
將第3部分中創(chuàng)建的文件復(fù)制到swarm管理器myvm1
的主目錄(別名:):~docker-machine scp
docker-machine scp docker-compose.yml myvm1:~
現(xiàn)在有myvm1
使用它作為群管理器的功能,通過發(fā)送同樣的命令來部署應(yīng)用程序。docker stack deploy
在第3部分中使用的命令myvm1
使用docker-machine ssh
*
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
就是這樣,應(yīng)用程序部署在一個集群上。
將第3部分中使用的所有命令打包到docker-machine ssh
它們都會像你所期望的那樣工作。只是這一次,您將看到容器在兩個myvm1
和myvm2
...
$ docker-machine ssh myvm1 "docker stack ps getstartedlab"ID NAME IMAGE NODE DESIRED STATE jq2g3qp8nzwx test_web.1 username/repo:tag myvm1 Running 88wgshobzoxl test_web.2 username/repo:tag myvm2 Running vbb1qbkb0o2z test_web.3 username/repo:tag myvm2 Running ghii74p9budx test_web.4 username/repo:tag myvm1 Running 0prmarhavs87 test_web.5 username/repo:tag myvm2 Running
您可以從任一 myvm1
或兩個的IP地址訪問您的應(yīng)用程序myvm2
。您創(chuàng)建的網(wǎng)絡(luò)在它們之間共享并負(fù)載平衡。運行docker-machine ls
以獲取虛擬機(jī)的IP地址,然后在瀏覽器中訪問其中的任意一個,并刷新(或者只是curl
它們)。您將看到五個可能的容器ID,它們都是隨機(jī)循環(huán)的,展示了負(fù)載平衡。
兩個ip地址工作的原因是群集中的節(jié)點參與了入口。路由網(wǎng)格這可以確保部署在集群中某個端口的服務(wù)始終保留在自己的端口上,而不管實際運行的是哪個節(jié)點。下面是一個服務(wù)的路由網(wǎng)格是如何被稱為my-web
在港口發(fā)表8080
在一個三節(jié)點群中,可以看到:
二次
二次
連接有問題嗎? 請記住,為了在群集中使用入口網(wǎng)絡(luò),在啟用群集模式之前,需要在群節(jié)點之間打開以下端口:
端口7946 TCP/UDP用于容器網(wǎng)絡(luò)的發(fā)現(xiàn)。
端口4789 UDP用于集裝箱入口網(wǎng)絡(luò)。
從這里開始,您可以完成在第3部分中了解到的所有內(nèi)容。
通過更改docker-compose.yml
檔案。
通過編輯代碼來改變應(yīng)用程序的行為。
在任何一種情況下,只需運行docker stack deploy
再次部署這些更改。
您可以使用相同的方法將任何機(jī)器,無論是物理機(jī)器還是虛擬機(jī)器,加入到這個群集中。docker swarm join
你用的命令myvm2
,則將將容量添加到群集中??炫?code>docker stack deploy之后,你的應(yīng)用程序?qū)⒗眯碌馁Y源。
你可以用docker stack rm
例如:
docker-machine ssh myvm1 "docker stack rm getstartedlab"
保持群或刪除它?在某個時候,如果你想要
docker-machine ssh myvm2 "docker swarm leave"
在工人和docker-machine ssh myvm1 "docker swarm leave --force"
經(jīng)理身上工作,你可以刪除這個群體,但是你需要這個群體的第5部分,所以請保留它。
關(guān)于第5部分
這是本頁所涵蓋內(nèi)容的終端記錄*
在第4部分中,您了解了群集是什么,集群中的節(jié)點如何成為管理人員或工作人員,如何創(chuàng)建群集,并在其上部署應(yīng)用程序。您看到核心Docker命令與第3部分并沒有改變,它們只是為了在群主上運行而成為目標(biāo)。您還看到了Docker網(wǎng)絡(luò)的強(qiáng)大功能,即使它們在不同的機(jī)器上運行,也能保持跨容器的負(fù)載平衡請求。最后,您學(xué)習(xí)了如何在集群上迭代和縮放應(yīng)用程序。
下面是一些您可能希望運行的命令,以便與群集進(jìn)行交互:
docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10 docker-machine env myvm1 # View basic information about your node docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm docker-machine ssh myvm1 "docker node inspect <node ID>" # Inspect a node docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm docker-machine start myvm1 # Start a VM that is currently not running docker-machine stop $(docker-machine ls -q) # Stop all running VMs docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app