在實際應用中,我們需要水平擴展我們的應用使之能夠達到負載均衡的目的息楔。docker可以使用service(服務)輕易地水平擴展一個分布式應用.
在一個分布式應用當中具滴,不同的app被稱為是services篱竭。
服務就是產(chǎn)品容器毙籽。一個服務運行著一個鏡像,但是它將鏡像的運行編輯成一個字典虫啥,eg:使用什么端口號蔚约,多少副本等等。通過伸縮一個服務來改變?nèi)萜鲗嵗臄?shù)量涂籽,指定更多的計算資源用于這項服務上炊琉。
通過docker-compose.yml來定義、運行和伸縮服務
eg:
version: "3"
services:
? web:
? ? # 替換成你自己的倉庫鏡像鏈接 replace username/repo:tag with your name and image details
? ? image: username/repo:tag
? ? deploy:
? ? ? replicas: 5
? ? ? resources:
? ? ? ? limits:
? ? ? ? ? cpus: "0.1"
? ? ? ? ? memory: 50M
? ? ? restart_policy:
? ? ? ? condition: on-failure
? ? ports:
? ? ? - "80:80"
? ? networks:
? ? ? - webnet
networks:
? webnet:
作用:
? ? 1. 從注冊域名下拉去上傳的鏡像
? ? 2. 運行鏡像五個實例來作為一個服務(被稱為web)又活,限制每一個cpu使用率為最多10%,50MB內(nèi)存
? ? 3. 當一個容器出錯時立即重啟
? ? 4. 映射端口4000到主機的80
? ? 5. 指示web的容器通過 網(wǎng)絡負載均衡來共同分享一個80端口(稱為webnet)锰悼,
? ? 6.?Define the?webnet?network with the default settings (which is a load-balanced overlay network).
運行負載均衡APP
首先執(zhí)行下條命令(下一節(jié)深入解釋)
docker swarm init
如果不執(zhí)行上面這句柳骄,可能會出現(xiàn)如下情況:
?If you don’t run?docker swarm init?you get an error that “this node is not a swarm manager.”
運行
docker stack deploy-cdocker-compose.yml getstartedlab
查看服務id
docker service ls
一個容器運行一個著一個服務,叫做任務箕般。任務有獨一無二的 id耐薯。
docker service ps?getstartedlab_web
顯示id僅數(shù)字增長的容器
docker containerls -q
伸縮應用
可以通過更改配置 replicas 的值對應用進行伸縮。保存更改后,重新運行
docker stack deploy -c docker-compose.yml getstartedlab
更新時曲初,docker 不需要關(guān)閉任何一個容器体谒。
關(guān)閉app
docker stack rm getstartedlab
關(guān)閉群(swarm)
docker swarm leave --force
總結(jié)一下:
docker run 足夠簡單,但是產(chǎn)品容器是作為服務來實現(xiàn)的臼婆。在compose file文件中抒痒,服務編碼成一個行為。這個文件可以用來伸縮颁褂、限制和重新部署你的應用故响。服務改變時,使用相同的命令 dockerc stack deploy .
掌握下列命令:
docker stack ls # List stacks or apps
docker stack deploy -c <composefile> <appname>? # Run the specified Compose file
docker service ls? ? ? ? ? ? ? ? # List running services associated with an app
docker service ps <service>? ? ? ? ? ? ? ? ? # List tasks associated with an app
docker inspect <task or container>? ? ? ? ? ? ? ? ? # Inspect task or container
docker container ls -q? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # List container IDs
docker stack rm <appname>? ? ? ? ? ? ? ? ? ? ? ? ? ? # Tear down an application
docker swarm leave --force? ? ? # Take down a single node swarm from the manager