shell执行docker命令卡挂住_Docker官方文档翻译4
第四篇:Swarms
準備工作
- 安裝Docker版本1.13或更高版本。
- 安裝Docker compose。
- 安裝docker machine
- 閱讀第1 2 3部分的內容。
- 確保你已發布并推送到注冊倉庫的friendlyhello鏡像。
- 確保你的鏡像可以部署為一個容器。 運行這個命令,在你的信息中插入用戶名,repo和標簽:docker run -p 80:80 username / repo:tag,然后訪問http:// localhost /。
- 第3部分復制docker-compose.yml文件。
介紹
在第3部分中,介紹了你在第2部分中編寫的應用程序,并定義了它應該如何在生產環境中運行,將其轉化為服務,并在此過程中將其擴展5倍實例。
在第4部分中,將此應用程序部署到群集上,并在多臺機器上運行它。 通過將多臺機器連接到稱為swarm的“Dockerized”群集,使多容器,多機器應用成為可能。
理解Swarm clusters
Swarm是一組運行Docker并加入到集群中的機器。加入到集群中之后,你將繼續運行你習慣的Docker命令,但現在它現在在Docker Swarm的集群上執行。集群中的機器可以是物理的也可以是虛擬的。加入集群后,單個容器被稱為節點。
Swarm manager可以使用多種策略來運行容器,例如“emptiest node” - 它可以使用容器填充使用率最低的機器?;蛘摺癵lobal”,它確保每臺機器只獲取指定容器的一個實例。swarm managerd的這些策略需要在Compose文件中指定。
Swarm manager是群體中唯一可以執行你的命令的機器,或者授權其他機器作為worker加入到群體中。workers只是在那里提供能力,并沒有權力告訴任何其他機器可以做什么和不可以做什么。
到目前為止,您已經在本地機器上以單主機模式使用Docker。但是Docker也可以切換到群集模式,這就是使用群集的原因。立即啟用群模式使當前的機器成為群管理器。從此,Docker將運行您在您管理的群集上執行的命令,而不僅僅是在當前機器上執行。
設置你的集群
一個swarm是由多個節點組成,節點可以是物理或者虛擬的機器。它的基本概念足夠簡單:運行docker swarm init 命令能夠開啟swarm模式,并且使你的當前機器成為swarm manager,運行docker swarm join命令能夠讓其他機器加入到 swarm 中成為worker機器。選擇的下面的選項卡,看看它是如何各自情況下發揮作用的。我們使用虛擬機快速創建一個雙機集群,并且將其變成swarm.
創建集群
你需需要一個可以創建虛擬機(VM)的虛擬機管理程序,因此請為你的計算機的操作系統安裝Oracle VirtualBox。
現在,創建兩個vm使用docker-machine ,使用VirtualBox 驅動:
docker-machine create --driver virtualbox myvm1 docker-machine create --driver virtualbox myvm2查看vm列表并獲取它們的ip地址
你現在有2個vms創建,名字為myvm1和myvm2。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 - virtualbox Running tcp://192.168.99.100:2376 v17.06.2-ce myvm2 - virtualbox Running tcp://192.168.99.101:2376 v17.06.2-ce初始化swarm 并且添加節點
第一個機器扮演的是manager的角色,它可以執行管理命令并且驗證worker 加入到 swarm中去,第二個是worker。
你可能發送命令到您的vms通過docker-machine ssh。指示myvm1成為一個擁有docker swarm init的swarm manager并輸出如下:
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>" 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> <myvm ip>:<port>To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.如您所見,對docker swarm init的響應包含一個預配置的docker swarm join命令,您可以在要添加的任何節點上運行該命令。 復制這個命令,并通過docker-machine ssh將它發送到myvm2,讓myvm2作為一個worker加入你的新群體:
$ docker-machine ssh myvm2 "docker swarm join --token <token> <ip>:2377"This node joined a swarm as a worker.恭喜,你已經成功創建了你的第一個swarm。
運行docker node ls在manager機器上去查看swarm 中的節點:
$ docker-machine ssh myvm1 "docker node ls" ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader發布你的應用到swarm cluster中去
最難的部分已經完結?,F在你只需要重復再第三部分的過程將應用發布到你的swarm中去。請記住只有像myvm1這樣的群集管理器才能執行Docker命令; worker只是用來工作的。
配置一個docker-machine命令成為swarm manager
到目前為止,你已經在Docker-machine ssh中將Docker命令包裝為與虛擬機交談。 另一種選擇是運行docker-machine env 來獲取并運行一個命令,該命令將當前shell配置為與VM上的Docker守護進程進行通信。 此方法對下一步更好,因為它允許您使用本地docker-compose.yml文件“遠程”部署應用程序,而無需將其復制到任何位置。
鍵入docker-machine env myvm1,然后復制粘貼并運行作為輸出最后一行提供的命令,以將shell配置為與swarm管理器myvm1對話。
配置shell的命令根據你是Mac,Linux還是Windows而有所不同,因此下面的選項卡中顯示了每個命令的示例。
MAC或LINUX上的DOCKER MACHINE SHELL環境
運行docker-machine env myvm1命令去得到命令配置你的shell與myvm1交互。
$ docker-machine env myvm1 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1" export DOCKER_MACHINE_NAME="myvm1" # Run this command to configure your shell: # eval $(docker-machine env myvm1)運行給定的命令來配置你的shell與myvm1進行通信。
eval $(docker-machine env myvm1)運行docker-machine ls命令去校驗現在這個活動的機器,如旁邊的星號所示。:
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 * virtualbox Running tcp://192.168.99.100:2376 v17.06.2-ce myvm2 - virtualbox Running tcp://192.168.99.101:2376 v17.06.2-ce在swarm manager中部署容器
現在你已經有了myvm1,你可以使用它的權利作為swarm manager器發布你的app通過使用第3部分中用于myvm1的相同docker stack deploy命令和docker-compose.yml的本地副本來部署您的應用程序。此命令可能需要幾秒鐘才能完成,部署的服務需要一段時間才能提供服務。在swarm管理器上使用docker service ps 命令驗證所有服務是否已被重新部署。
你通過docker-machine shell配置連接到myvm1,并且你仍然可以訪問本地主機上的文件。 確保你和之前操作在同一個目錄下,其中包括你在第3部分中創建的docker-compose.yml文件。
和之前一樣,運行下面的命令在mym1機器上部署應用。
docker stack deploy -c docker-compose.yml getstartedlab正是這樣,應用在swarm 集群中國部署了!
現在,你可以使用第3部分中使用的相同docker命令。只有這一次,請注意,服務(及相關容器)已在myvm1和myvm2之間分配。
$ docker stack ps getstartedlabID NAME IMAGE NODE DESIRED STATE jq2g3qp8nzwx getstartedlab_web.1 john/get-started:part2 myvm1 Running 88wgshobzoxl getstartedlab_web.2 john/get-started:part2 myvm2 Running vbb1qbkb0o2z getstartedlab_web.3 john/get-started:part2 myvm2 Running ghii74p9budx getstartedlab_web.4 john/get-started:part2 myvm1 Running 0prmarhavs87 getstartedlab_web.5 john/get-started:part2 myvm2 Running訪問你的集群
你可以從myvm1或myvm2的IP地址訪問你的應用程序。
你創建的網絡在它們之間共享并負載平衡。 運行docker-machine ls來獲取虛擬機的IP地址,并在瀏覽器中訪問它們中的任何一個,并刷新(或者通過curl請求)。
有五個可能的容器ID全部隨機輪訓,來實現負載平衡。
兩個IP地址工作的原因是群中的節點參與入口路由網格。 這可以確保部署在群集中某個端口的服務始終將該端口保留給自己,而不管實際運行容器的節點是什么。 以下是三節點群上端口8080上發布的名為my-web的服務的路由網格示意圖:
迭代和擴展應用程序
從這里你可以完成你在第二部分和第三部分中學到的一切。
通過更改docker-compose.yml文件來擴展應用程序。
通過編輯代碼更改應用程序行為,然后重新構建并推送新鏡像。 (要做到這一點,請按照與之前構建應用程序和發布鏡像相同的步驟進行操作。
無論哪種情況,只需簡單地再次運行docker stack deploy來部署這些更改。
你可以使用你在myvm2上使用的相同docker swarm join命令將任何物理或虛擬機器加入此群集。之后只需運行Docker堆棧部署,并且你的應用可以利用新資源。
清除和重啟
Stacks and swarms(堆棧和集群)
你能通過docker stack rm卸載堆棧。例如:
docker stack rm getstartedlab取消設置docker-machine shell變量設置
你可以使用給定的命令取消當前shell中的docker-machine環境變量。在mac或者linux環境中命令如下:
eval $(docker-machine env -u)這將shell與docker-machine創建的虛擬機斷開連接,并允許您繼續在同一個shell中工作,現在使用本機docker命令(例如,在Docker for Mac或Docker for Windows上)。 要了解更多信息,請參閱關于取消設置環境變量的機器主題。
重啟Docker machines
如果不關閉你的本地主機,Docker machines將會停止運行。你能通過運行docker-machine ls命令來檢查機器的狀態。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 - virtualbox Stopped Unknown myvm2 - virtualbox Stopped Unknown要重新啟動已停止的計算機,請運行以下命令:
docker-machine start <machine-name>例如:
$ docker-machine start myvm1 Starting "myvm1"... (myvm1) Check network to re-create if needed... (myvm1) Waiting for an IP... Machine "myvm1" was started. Waiting for SSH to be available... Detecting the provisioner... Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.$ docker-machine start myvm2 Starting "myvm2"... (myvm2) Check network to re-create if needed... (myvm2) Waiting for an IP... Machine "myvm2" was started. Waiting for SSH to be available... Detecting the provisioner... Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.總結
在第4部分中,你了解了群體是什么,群體中的節點如何成為manager或workwer,創建群體并在其上部署應用程序。 你看到Docker的核心命令并沒有從第3部分改變,他們只需要將目標鎖定在swarm master上。 你還看到了Docker網絡的力量,即使它們運行在不同的機器上,也可以跨容器保持負載平衡請求。 最后,你學習了如何在集群上迭代和縮放應用程序。
以下是一些您可能想要運行的命令,以便與你的群集和虛擬機進行一點交互:
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 node ls # View nodes in swarm (while logged on to manager) 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 ls # list VMs, asterisk shows which VM this shell is talking to docker-machine start myvm1 # Start a VM that is currently not running docker-machine env myvm1 # show environment variables and command for myvm1 eval $(docker-machine env myvm1) # Mac command to connect shell to myvm1 & "C:Program FilesDockerDockerResourcesbindocker-machine.exe" env myvm1 | Invoke-Expression # Windows command to connect shell to myvm1 docker stack deploy -c <file> <app> # Deploy an app; command shell must be set to talk to manager (myvm1), uses local Compose file docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir (only required if you use ssh to connect to manager and deploy the app) docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app using ssh (you must have first copied the Compose file to myvm1) eval $(docker-machine env -u) # Disconnect shell from VMs, use native docker 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總結
以上是生活随笔為你收集整理的shell执行docker命令卡挂住_Docker官方文档翻译4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 德云斗笑社何九华为什么没参加_狗狗的身体
- 下一篇: 帕累托最优生活例子_创业者:用博弈解决生