摘要:介紹在第部分中,我們將擴展應(yīng)用程序并啟用負(fù)載平衡。運行您的新負(fù)載平衡應(yīng)用程序在我們使用命令之前,我們先運行注意我們將在第部分中了解該命令的含義。無論如何,您將看到容器的更改,顯示負(fù)載平衡在每個請求中,選擇一個循環(huán)模式的個任務(wù)中的一個來響應(yīng)。
介紹
在第3部分中,我們將擴展應(yīng)用程序并啟用負(fù)載平衡。為此,我們必須在分布式應(yīng)用程序的層次結(jié)構(gòu)中提升一個級別:服務(wù)。
Stack
Services (你在這里)
Container (涵蓋在第2部分中)
關(guān)于服務(wù)在分布式應(yīng)用程序中,應(yīng)用程序的不同部分被稱為“服務(wù)”。例如,如果你想象一個視頻分享網(wǎng)站,它可能包括一個用于在數(shù)據(jù)庫中存儲應(yīng)用程序數(shù)據(jù)的服務(wù),一個在用戶上傳某個東西后在后臺進(jìn)行視頻轉(zhuǎn)換的服務(wù),一個為前端服務(wù)的服務(wù),等等。
服務(wù)實際上只是“生產(chǎn)中的容器”。一個服務(wù)只運行一個鏡像,但它將以鏡像的方式運行——它應(yīng)該使用的端口,容器應(yīng)該運行多少個副本,這樣服務(wù)具有它需要的容量等等——的方式進(jìn)行了編碼。擴展服務(wù)會改變運行該軟件的容器實例的數(shù)量,為流程中的服務(wù)分配更多的計算資源。
幸運的是,使用Docker平臺定義、運行和擴展服務(wù)很容易——只需編寫docker-compose.yml文件。
你的第一個docker-compose.yml文件docker-compose.yml文件是一個YAML文件,它定義了Docker容器在生產(chǎn)中的行為。
docker-compose.yml將此文件保存為docker-compose.yml無論什么位置。確保您已經(jīng)將在第2部分中創(chuàng)建的鏡像推送到注冊中心,更新這個yml文件,用你鏡像中的內(nèi)容替換username/repo:tag。
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:
docker-compose.yml告訴Docker做下面的事情:
從注冊表中提取第2步中上傳的圖像。
將該映像的5個實例作為web服務(wù)運行,限制每個CPU使用最多10%的CPU(跨所有內(nèi)核)和50MB RAM。
如果失敗,立即重新啟動容器。
將端口80映射到web的端口80。
指示web容器通過一個名為webnet的負(fù)載均衡網(wǎng)絡(luò)共享端口80。(在內(nèi)部,容器本身將在臨時端口上發(fā)布到web的端口80。)
用默認(rèn)設(shè)置定義webnet網(wǎng)絡(luò)(這是一個負(fù)載均衡的覆蓋網(wǎng)絡(luò))。
運行您的新負(fù)載平衡應(yīng)用程序在我們使用docker stack deploy命令之前,我們先運行:
docker swarm init
注意:我們將在第4部分中了解該命令的含義。如果你不運行docker swarm init,你會得到一個錯誤,“這個節(jié)點不是一個群集管理器?!?/p>
現(xiàn)在,讓我們來運行它。你必須給你的應(yīng)用一個名字。在這里,它被設(shè)置為getstartedlab
docker stack deploy -c docker-compose.yml getstartedlab
我們的單一服務(wù)堆棧在一個主機上運行我們部署映像的5個容器實例。讓我們調(diào)查。
在我們的應(yīng)用程序中獲得一個服務(wù)的服務(wù)ID:
docker service ls
您將看到web服務(wù)的輸出,并以您的應(yīng)用程序名稱為前提。如果您將其命名為與本例中顯示的相同,則名稱將為getstartedlab_web。服務(wù)ID也被列出,以及復(fù)制的數(shù)量、圖像名稱和暴露的端口。
在服務(wù)中運行的單個容器稱為任務(wù)。任務(wù)被賦予獨特的id,replicas遞增,知道達(dá)到您在docker-compose.yml中定義的副本數(shù)量。列出服務(wù)的任務(wù):
docker service ps getstartedlab_web
如果您將系統(tǒng)上所有的容器列表列出,但這些任務(wù)也不會被服務(wù)過濾:
docker container ls -q
您可以多次運行curl -4 http://localhost,或者在瀏覽器中訪問該URL并點擊刷新幾次。
無論如何,您將看到容器ID的更改,顯示負(fù)載平衡;在每個請求中,選擇一個循環(huán)模式的5個任務(wù)中的一個來響應(yīng)。容器id將與前面的命令(docker container ls -q)匹配。
擴大app的規(guī)模您可以通過在docker-compose.yml中更改replicas來擴展應(yīng)用程序,保存更改,并重新運行docker stack deploy命令:
docker stack deploy -c docker-compose.yml getstartedlab
Docker將做一個就地更新,不需要先拆下堆棧,也不需要殺死任何容器。
現(xiàn)在,重新運行docker container ls -q,以查看已部署的實例重新配置。如果您將副本按比例放大,就會有更多的任務(wù),因此會有更多的容器。
拿下應(yīng)用程序,用docker stack rm
docker stack rm getstartedlab
拿下swarm
docker swarm leave --force
這就像站起來,和Docker一起擴展你的應(yīng)用一樣簡單。您已經(jīng)向?qū)W習(xí)如何在生產(chǎn)中運行容器邁出了一大步。接下來,您將學(xué)習(xí)如何在Docker機器集群上運行這個應(yīng)用程序。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/27141.html
摘要:上文書,創(chuàng)建對象需要先創(chuàng)建對象。創(chuàng)建對象的雜活是嵌入在中的。對象使用來管理依賴關(guān)系非常好,但不是必須的。很容易實現(xiàn),但手工維護(hù)各種亂七八糟的對象還是很麻煩。所有文章均已收錄至項目。 本文翻譯自 Symfony 作者 Fabien Potencier 的 《Dependency Injection in general and the implementation of a Depend...
摘要:依賴注入并不限于構(gòu)造函數(shù)作為經(jīng)驗,注入最適合必須的依賴關(guān)系,比如示例中的情況注入最適合可選依賴關(guān)系,比如緩存一個對象實例。 本文翻譯自 Symfony 作者 Fabien Potencier 的 《Dependency Injection in general and the implementation of a Dependency Injection Container in P...
閱讀 3401·2023-04-26 00:07
閱讀 4047·2021-11-23 10:08
閱讀 3060·2021-11-22 09:34
閱讀 933·2021-09-22 15:27
閱讀 1813·2019-08-30 15:54
閱讀 3859·2019-08-30 14:07
閱讀 987·2019-08-30 11:12
閱讀 754·2019-08-29 18:44