與獨立容器相比, Swarm 服務提供了幾個優勢。他們使用聲明性模型,這意味著您定義了所需的狀態,Docker 將您的服務保持在該狀態。服務提供自動負載平衡擴展,以及控制服務分布的能力,以及其他優勢。服務還允許您將敏感數據(例如 TLS 證書)存儲在 secrets中。
您使用的存儲后端決定了您是使用完全擴展的服務還是僅具有單個節點或節點約束的服務。
如果您使用分布式存儲驅動程序,例如 Amazon S3,則可以使用完全復制的服務。每個工作人員都可以寫入存儲后端而不會引起寫入沖突。
如果您使用本地綁定掛載或卷,則每個工作節點都會寫入自己的存儲位置,這意味著每個注冊表都包含不同的數據集。您可以通過使用單副本服務和節點約束來解決此問題,以確保只有單個工作人員正在寫入綁定掛載。
以下示例將注冊表作為單副本服務啟動,該服務可在端口 80 上的任何 swarm 節點訪問。假設您使用與前面示例中相同的 TLS 證書。
首先,將 TLS 證書和密鑰保存為機密:
$ docker secret create domain.crt certs/domain.crt
$ docker secret create domain.key certs/domain.key
接下來,將標簽添加到要運行注冊表的節點。要獲取節點的名稱,請使用docker node ls. 用您的節點名稱替換 node1下面的名稱。
$ docker node update --label-add registry=true node1
接下來,創建服務,授予它訪問這兩個秘密的權限,并將其限制為僅在帶有標簽的節點上運行registry=true。除了約束之外,您還指定一次只能運行一個副本。/mnt/registry示例將swarm 節點上的綁定掛載到/var/lib/registry/ 容器內。綁定掛載依賴于預先存在的源目錄,因此請確保/mnt/registry存在于node1. docker service create您可能需要在運行以下命令之前創建它。
默認情況下,秘密被掛載到一個服務中/run/secrets/。
$ docker service create /
--name registry /
--secret domain.crt /
--secret domain.key /
--constraint 'node.labels.registry==true' /
--mount type=bind,src=/mnt/registry,dst=/var/lib/registry /
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 /
-e REGISTRY_HTTP_TLS_CERTIFICATE=/run/secrets/domain.crt /
-e REGISTRY_HTTP_TLS_KEY=/run/secrets/domain.key /
--publish published=443,target=443 /
--replicas 1 /
registry:2
您可以在任何 swarm 節點的 443 端口訪問該服務。Docker 將請求發送到運行服務的節點。
本文鏈接:http://www.www897cc.com/showinfo-119-2341-0.html云計算核心技術Docker教程:注冊服務器Swarm 服務運行
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com