前言
搭建好我們的容器編排集群,那我們總不能日常的時候也在命令行進行操作,所以我們需要使用到一些可視化的工具,Docker
圖形化管理提供了很多工具,有Portainer
、Docker UI
、Shipyard
等等,本文主要介紹Portainer
。
Portainer
是一個開源、輕量級Docker
管理用戶界面,基於Docker API
,提供狀態顯示面板、應用模板快速部署、容器鏡像網絡數據卷的基本操作(包括上傳下載鏡像,創建容器等操作)、事件日志顯示、容器控制台操作、
Swarm集群
和服務等集中管理和操作、登錄用戶管理和控制等功能。功能十分全面,基本能滿足中小型單位對容器管理的全部需求。
單機運行
如果僅有一個docker宿主機
,則可使用單機版
運行,Portainer單機版
運行十分簡單,只需要一條語句即可啟動容器,來管理該機器上的docker
鏡像、容器等數據。
-
下載鏡像
docker pull portainer/portainer
-
創建數據卷
docker volume create portainer_data
-
運行容器
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
參數說明:
-d:容器在后台運行;
-p 9000:9000 :宿主機9000端口映射容器中的9000端口
-v /var/run/docker.sock:/var/run/docker.sock :把宿主機的Docker守護進程(Docker daemon)默認監聽的Unix域套接字掛載到容器中;
-v portainer_data:/data :把宿主機portainer_data數據卷掛載到容器/data目錄;
-
查看容器進程
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
439cc8a6d44a portainer/portainer "/portainer" 13 seconds ago Up 13 seconds 0.0.0.0:9000->9000/tcp amazing_clarke
-
訪問服務
訪問方式:http://IP:9000 ,首次登錄需要注冊用戶,給用戶admin
設置密碼,如下圖:
單機版本選擇“Local"
,點擊Connect
即可連接到本地docker
,如下圖:
集群運行
更多的情況下,我們會有一個docker集群
,可能有幾台機器
,也可能有幾十台機器
,因此,進行集群管理就十分重要了,Portainer
也支持集群管理,Portainer
可以和Swarm
一起來進行集群管理操作。
在管理節點執行以下操作:
-
下載鏡像
docker pull portainer/portainer
-
創建數據卷
docker volume create portainer_data
-
創建網絡
docker network create --driver overlay --attachable portainer_agent_network
-
創建portainer代理
docker service create \ --name portainer_agent \ --network portainer_agent_network \ --mode global \ --constraint 'node.platform.os == linux' \ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \ portainer/agent
-
創建portainer服務
docker service create \ --name portainer \
--network portainer_agent_network \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role==manager' \
--constraint node.hostname==manager-node \
--container-label com.docker.stack.namespace=portainer \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=volume,src=portainer_data,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sock
參數說明:
-publish 9000:9000 :宿主機9000端口映射容器中的9000端口
-mount type=bind /var/run/docker.sock:/var/run/docker.sock :把宿主機的Docker守護進程(Docker daemon)默認監聽的Unix域套接字掛載到容器中;
-mount type=volume portainer_data:/data :把宿主機portainer_data數據卷掛載到容器/data目錄;
--constraint node.role==manager 指定容器運行在管理節點上.
--constraint node.hostname==manager-node 指定容器運行在管理節點manager-node上.
--container-label com.docker.stack.namespace=portainer 是為了prometheus+grafana能通過stack標簽查看監控數據,建議今后不以stack方式部署的服務都加上com.docker.stack.namespace標簽。
-
訪問服務
訪問方式:http://IP:9000 ,首次登錄需要注冊用戶,給用戶admin
設置密碼,如下圖:
我們進入之后可以看到這個一個界面:
-
儀表盤和Swarm
儀表盤展示了Swarm集群的信息:
注意CPU 處為4、總內存為16.4 GB,集群內的每個節點有2個CPU且內存為8.2 GB,所以這些值為集群的總和。
點擊 cluster vizualizer會進入Swarm頁面, 這里有一個集群的視覺總覽,唯一運行的服務是當前的Portainer:
點擊名稱列的cluster會進入一個服務的總覽頁面。可以看到,有很多服務相關的信息:
可以對服務進行實時的修改,包括位置約束、重啟策略、添加服務標簽等等。
找到 Resource limits and reservations 的位置,可以修改服務資源限制:
在頁面的最底部是與服務關聯的任務列表:
可以看到,我們有2個運行中的任務,2個節點上各有1個。點擊左側菜單中的Containers會顯示一些你可能沒預料到的信息:
只列出了1個容器,正常應該是有2個才對。為什么呢?
我們學習了docker container命令實際上僅在運行它們的節點上進行了應用,因為Portainer是在和manager進行對話,那是docker container命令所唯一進行運行的節點。記住Portainer只是Docker API的一個網頁界面,因此它與命令行中運行 docker container ls的結果相同。
-
添加端點(endpoint)
但是我們可以將剩下的兩個集群節點加到Portainer中。要進行添加,點擊左側菜單的Endpoint項。
然后點擊+ Add endpoint按鍵,點擊Home會帶你進入本章這部分開頭處所見到的Endpoint總覽頁面。從下面的截圖中可以看到,worker節點分別運行了三個容器,並且它們 被標記為單機版而非 Swarm:
這時選擇新的swarm cluster下左側菜單中的的continers就會顯示所有節點上的容器了:
-
添加私有倉庫(registry)
擴展閱讀
有關Portainer的更多信息參見:
- 官網:https://portainer.io/
- Portainter的GitHub地址:https://github.com/portainer/
- 最新文檔:https://portainer.readthedocs.io/en/latest/index.html
- 模板文檔:http://portainer.readthedocs.io/en/latest/templates.html
- Portainter Agent:https://portainer.readthedocs.io/en/stable/agent.html