在一個分佈式應用中,咱們把應用的不一樣層叫作「Services」。好比,一個視頻共享應用,它包含存儲數據到數據庫的服務,用戶上載後後臺進行的視頻解碼服務,前端服務等等。前端
然而,一個服務只能在一個鏡像中運行,這使得一個分佈式應用可能會產生衝突,好比,端口衝突,容器複用等等。因此,docker-compose.yml文件應運而生。web
一 、運行docker-compose.yml文件來創新一個servicedocker
前提數據庫
1,將本地要運行的某個容器鏡像上傳至本身的的docker倉庫瀏覽器
如,我想要運行一個web服務,首先生成本身的web容器,該容器生成方法參照個人上一篇文章,而後給friendlyhello鏡像打個標籤app
(標籤名字得跟倉庫中的用戶名和路徑一致,通常格式」usrname/path:tag」)如圖curl
即上述操做完成了鏡像上傳。分佈式
2,接下來就是利用docker-compose文件建立一個web服務url
將上述文件保存爲docker-compose.yml,即在當前目錄下含有spa
而後在當前目錄下運行docker swarm init 將該機器配置成服務的管理者,
再運行docker stack deploy -c docker-compose.yml getstartedlab(其中getstartedlab是你給你的app服務取的名字,運行成功後,經過docker service ls 命令查看服務是否創建起來,而後打開瀏覽器鏈接到localhost查看咱們的app服務的輸出,或者運行curl -4 http://localhost 查看輸出。
至此一個app服務已經創建好了。
3,擴展app服務
你能夠反覆修改你的docker-compose.yml文件,並運行命令docker stack deploy -c docker-compose.yml getstartedlab來擴展你的app服務。
4,卸載app服務和swarm
docker stack rm getstartedlab
docker swarm leave --force
2、理解Swarm集羣
一個swarm是一組運行docker的機器並加入到集羣中。在集羣中,swarm管理者來執行機器中的命令,這些機器能夠是物理的或者虛擬的,也被稱做節點。
3、Swarm管理者的運行容器的調度策略
1,最大限度的利用每一個機器
即每一個機器很可能運行足夠多的容器,噹噹前機器不足以知足調度隊列中下一個容器所需資源時才更換另外一個機器。
2,每一個機器至少運行一個特定容器
即查詢調度隊列中容器數量,儘量保證每一個機器上都至少運行一個特定容器。
一個swarm集羣有一個管理者和多個工做者,其中管理者可以認證其餘機器來參與集羣中的工做,工做者只提供工做能力而不具有認證其餘機器的權限。
具體實現思路請參照個人下一篇文章,歡迎讀者留下爪印共同探討。本文參考了docker官網文件https://docs.docker.com/。