Docker Swarm是docker官方三劍客項目之一,提供docker容器集羣服務,是docker官方對容器雲生態進行支持 的核心方案。使用它,用戶能夠將多個docker主機封裝爲單個大型的虛擬docker主機,快速打造一套容器雲平臺。node
注意:docker 1.12.0+Swarm mode已經內嵌入docker引擎,成爲了docker子命令docker swarm,絕大多數用戶已經開始使用swarm mode,docker引擎API已經刪除Docker Swarm。nginx
基本概念docker
Swarm是使用SwarmKit構建的docker引擎內置(原生)的集羣管理和編排工具。使用Swarm集羣執勤啊須要瞭解以下幾個概念:瀏覽器
節點服務器
運行docker的主機能夠主動初始化一個swarm集羣或者加入一個已存在的swarm集羣,這樣這個運行docker的主機就稱爲一個swarm集羣的節點。網絡
節點分爲管理節點和工做節點。管理節點用於swarm集羣的管理,docker swarm命令基本只能在管理節點執行。工做節點是任務執行節點,管理節點將服務下發至工做節點執行。工具
集羣中管理節點與工做節點的關係:3d
服務和任務rest
任務(Task)是swarm中的最小的調度單位,目前來講就是一個單一的容器。服務(Services)是指一組任務的集合,服務定義了任務的屬性。日誌
服務有兩種模式:
兩種模式經過docker service create
的--mode
參數指定。
容器、任務、服務的關係:
建立swarm集羣
瞭解swarm集羣由管理節點和工做節點組成後,咱們來建立一個包含一個管理節點和兩個工做節點的最小swarm集羣。
初始化集羣
使用docker swarm init
在本機初始化一個swarm集羣
docker swarm init --advertise-addr 192.168.100.249
若是你的docker主機有多個網卡,擁有多個IP,必須使用--advertise-addr
指定IP。
執行docker swarm init
命令的節點自動成爲管理節點。
增長工做節點
在另外兩臺服務器上執行上一步建立管理節點時輸出的加入swarm集羣的命令
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.100.24: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默認頁面。
查看服務
使用docker service ls
來查看當前swarm集羣運行的服務
docker service ls
使用docker service ps
來查看某個服務的詳情
docker service ps nginx
使用docker service logs
來查看某個服務的日誌
docker service logs nginx
刪除服務
使用docker service rm
來從swarm集羣移除某個服務
docker service rm nginx
資源管理
前面咱們學過了利用docker swarm快速搭建一個最小集羣,也能夠在集羣上部署服務,可是會發現swarm中並無提供統一入口查看節點的資源使用狀況。這個時候咱們急切的但願有一個圖形化管理工具來幫咱們管理swarm集羣,portainer就是這樣的一個工具。
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配置