Docker Swarm資源管理
Docker Swarm是Docker官方三劍客項目之一,提供Docker容器集群服務,是Docker官方對容器雲生態進行支持的核心方案。
使用它,用戶可以將多個Docker主機封裝為單個大型的虛擬Docker主機,快速打造一套容器雲平台。
注意:Docker1.12.0之后版本,Swarm模塊已經內嵌入Docker引擎,成為Docker子命令docker swarm,絕大多用戶已經開始使用Swarm模塊,Docker引擎API已經刪除Docker Swarm。
基本概念
Swarm是使用SwarmKit構建的Docker引擎內置(原生)的集群管理和編排工具。使用Swarm集群之前需要了解以下幾個概念。
節點
運行Docker的主機可以主動初始化一個Swarm集群或者加入一個已存在的Swarm集群,這樣運行Docker的主機就成為一個Swarm集群的節點(node)。
節點分為管理(manager)節點和工作(worker)節點。
- 管理節點用於Swarm集群的管理,docker swarm集合基本只能在管理節點執行。
- 工作節點是任務執行節點,管理節點將服務(service)下發至工作節點執行。
集群中管理節點與工作節點的關系
服務和任務
任務(Task)是Swarm中的最小的調度單位,目前來說就是一個單一的容器。
服務(Services)是指一組任務的集合,服務定義了任務的屬性。
服務有兩種模式:
- replicated services 按照一定規則在各個工作節點上運行指定個數的任務。
- global services每個工作節點運行一個任務
兩個模式通過docker service create的--mode參數指定
容器、任務、服務的關系
創建Swarm集群
了解Swarm集群由管理節點和工作節點組成后,我們創建一個包含一個管理節點和兩個工作節點的最小Swarm集群。
初始化集群
使用docker swarm init在本地初始化一個Swarm集群。
docker swarm init --advertise-addr 192.168.1.1
如果你的Docker主機有多個網段,擁有多個IP,必須使用--advertise-addr指定IP。執行docker swarm init命令的節點自動成為管理節點。
注意:使用docker swarm init
增加工作節點
在另外兩台服務器上執行上一步創建管理節點時候的輸出的加入swarm集群的全集
docker swarm join \
--token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \
192.168.1.1:2377
查看集群
在管理節點使用docker node ls查看集群。
docker node ls
部署服務
使用docker service命令來管理Swarm集群中的服務,該命令只能在管理節點運行。
新建服務
在創建好的Swarm集群中運行nginx服務
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
現在我們使用瀏覽器,輸入任意節點IP,即可看到nginx默認頁面。
查看服務
查看當前Swarm集群運行的服務
docker service ls
查看某個服務的詳情
docker service ps nginx
查看某個服務的日志
docker service logs nginx
刪除服務
從Swarm集群中移除某個服務
docker service rm nginx
資源管理
前面利用Docker Swarm快速搭建一個最小集群,也可以在集群上部署服務,但是會發現swarm中並沒有提供統一入口查看節點的資源使用情況。這時我們可以用圖形化管理工具Portainer幫我們管理swarm集群。
Portainer是Docker的圖形化管理工具,提供狀態顯示面板、應用模板快速部署、容器鏡像網絡數據卷的基本操作(包括上傳下載鏡像、創建容器等操作)、事件日志顯示、容器控制台操作、Swarm集群和服務等集中管理和操作、登陸用戶管理和控制等功能。功能十分全面,基本能滿足小型單位對容器管理的全部需求。
Portainer集群運行
下載Portainer鏡像
#查詢當前有哪些Portainer鏡像
docker search portainer
docker pull portainer/portainer
安裝Portainer(管理節點)
docker run -d -p 9000:9000 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer
Portainer配置
設置管理員帳號密碼
Portainer界面內容