在一個分布式應用中,我們把應用的不同層叫做“Services”。比如,一個視頻共享應用,它包含存儲數據到數據庫的服務,用戶上載后后台進行的視頻解碼服務,前端服務等等。
然而,一個服務只能在一個鏡像中運行,這使得一個分布式應用可能會產生沖突,比如,端口沖突,容器復用等等。所以,docker-compose.yml文件應運而生。
一 、運行docker-compose.yml文件來創新一個service
前提
1,將本地要運行的某個容器鏡像上傳至自己的的docker倉庫
如,我想要運行一個web服務,首先生成自己的web容器,該容器生成方法參照我的上一篇文章,然后給friendlyhello鏡像打個標簽
(標簽名字得跟倉庫中的用戶名和路徑一致,一般格式”usrname/path:tag”)如圖
即上述操作完成了鏡像上傳。
2,接下來就是利用docker-compose文件創建一個web服務
將上述文件保存為docker-compose.yml,即在當前目錄下含有
然后在當前目錄下運行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
二、理解Swarm集群
一個swarm是一組運行docker的機器並加入到集群中。在集群中,swarm管理者來執行機器中的命令,這些機器可以是物理的或者虛擬的,也被稱作節點。
三、Swarm管理者的運行容器的調度策略
1,最大限度的利用每個機器
即每個機器極可能運行足夠多的容器,當當前機器不足以滿足調度隊列中下一個容器所需資源時才更換另一個機器。
2,每個機器至少運行一個特定容器
即查詢調度隊列中容器數量,盡可能保證每個機器上都至少運行一個特定容器。
一個swarm集群有一個管理者和多個工作者,其中管理者能夠認證其他機器來參與集群中的工作,工作者只提供工作能力而不具備認證其他機器的權限。
具體實現思路請參照我的下一篇文章,歡迎讀者留下爪印共同探討。本文參考了docker官網文件https://docs.docker.com/。