Docker圖形頁面管理工具基本常用的有三種: DOCKER UI,Shipyard,Portainer。對比後發現,Shipyard最強大,其次是Portainer,最後是Docker ui。Shipyard是建立在docker叢集管理工具Citadel之上的可以管理容器、主機等資源的web圖形化工具,包括core和extension兩個版本,core即shipyard主要是把多個 Docker host上的 containers 統一管理(支援跨越多個host),extension即shipyard-extensions新增了應用路由和負載均衡、集中化日誌、部署等;Shipyard是在Docker Swarm實現對容器、映象、docker叢集、倉庫、節點進行管理的web系統。
DockerUI功能:通過Web瀏覽器的命令列來管理的任務。
DockerUI的優點
1)可以對執行著的容器進行批量操作
2)在容器網路中-會顯示容器與容器間的網路關係
3)在Volumes中顯示了所有掛載目錄
DockerUI一個致命的缺點:不支援多主機.試想一下,如果有N臺docker主機時-我就需要一臺臺的用dockerui進行管理,想想都覺得麻煩。就單臺主機而言,dockerui是一款不錯的管理工具。
Shipyard功能:是一個整合管理docker容器、映象、Registries的系統,它可以簡化對橫跨多個主機的Docker容器叢集進行管理. 通過Web使用者介面,你可以大致瀏覽相關資訊,比如你的容器在使用多少處理器和記憶體資源、在執行哪些容器,還可以檢查所有叢集上的事件日誌。
其特性主要包括:
1)支援節點動態叢集,可擴充套件節點的規模(swarm、etcd方案)
2)支援映象管理、容器管理、節點管理等功能
3)視覺化的容器管理和監控管理
4)線上容console終端
Shipyard幾個概念
1)engine
一個shipyard管理的docker叢集可以包含一個或多個engine(引擎),一個engine就是監聽tcp埠的docker daemon。shipyard管理docker daemon、images、containers完全基於Docker API,不需要做其他的修改。另外,shipyard可以對每個engine做資源限制,包括CPU和記憶體;因為TCP監聽相比Unix socket方式會有一定的安全隱患,所以shipyard還支援通過SSL證照與docker後臺程式安全通訊。
2)rethinkdb
RethinkDB是一個shipyard專案的一個docker映象,用來存放賬號(account)、引擎(engine)、服務金鑰(service key)、擴充套件後設資料(extension metadata)等資訊,但不會儲存任何有關容器或映象的內容。
Shipyard生態
shipyard是由shipyard控制器以及周圍生態系統構成,以下按照deploy啟動順序進行介紹(下面幾個就是shipyard使用指令碼安裝後,啟動的幾個容器名)
1)RethinkDB
deploy首先啟動的就是RethinkDB容器,shipyard採用RethinkDB作為資料庫來儲存使用者等資訊
2)Discovery
為了使用Swarm,我們需要一個外部的金鑰值儲存群容器,shipyard預設是採用了etcd。
3)shipyard_certs
證照管理容器,實現證照驗證功能
4)Proxy
預設情況下,Docker引擎只監聽Socket,我們可以重新配置引擎使用TLS或者使用一個代理容器,轉發請求從TCP到Docker監聽的UNIX Socket。
5)Swarm Manager
Swarm管理器
6)Swarm Agent
Swarm代理,執行在每個節點上。
7)Controller
shipyard控制器,Remote API的實現和web的實現。
Centos7.5系統下Shipyard(中文版)部署記錄
[root@docker-218 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@docker-218 ~]# ifconfig|grep 172.16.60.218 inet 172.16.60.218 netmask 255.255.255.0 broadcast 172.16.60.255 關閉主機防火牆 [root@docker-218 ~]# systemctl disable firewalld.service [root@docker-218 ~]# systemctl stop firewalld.service [root@docker-218 ~]# iptables -F [root@docker-218 ~]# firewall-cmd --state not running 安裝docker [root@docker-218 ~]# yum install docker 修改docker配置檔案,新增下面一行,進行docker加速設定 [root@node-1 ~]# vim /etc/sysconfig/docker //在檔案底部新增下面一行, (這裡就是直接寫: xxx.mirror.aliyuncs.com) ADD_REGISTRY='--add-registry xxx.mirror.aliyuncs.com' 啟動docker服務 [root@docker-218 ~]# systemctl start docker 下載相關映象(這些映象如果不提前下載,則在下面一鍵安裝部署時會自動下載,不過要等待一段時間. 所以最好提前下載,一鍵部署時就很快了) [root@docker-218 ~]# docker pull rethinkdb [root@docker-218 ~]# docker pull microbox/etcd [root@docker-218 ~]# docker pull shipyard/docker-proxy [root@docker-218 ~]# docker pull swarm [root@docker-218 ~]# docker pull dockerclub/shipyard 下載官方一鍵部署指令碼 https://shipyard-project.com/deploy 這個地址已經失效 最新下載地址: https://pan.baidu.com/s/1ATM32S7tLA35Q-xK7-TgzQ 提取密碼: kgqi 接著執行一鍵部署 替換Controller為中文版 [root@docker-213 ~]# chmod 755 shipyard-deploy [root@docker-213 ~]# sh shipyard-deploy Deploying Shipyard -> Starting Database -> Starting Discovery -> Starting Cert Volume -> Starting Proxy -> Starting Swarm Manager -> Starting Swarm Agent -> Starting Controller Waiting for Shipyard on 172.16.60.213:8080 Shipyard available at http://172.16.60.213:8080 Username: admin Password: shipyard 部署後,可以看到相應的shipyard容器已經建立好了 [root@docker-218 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0cc242b4d90b dockerclub/shipyard:latest "/bin/controller -..." 19 seconds ago Up 15 seconds 0.0.0.0:8080->8080/tcp shipyard-controller ce08a7f0f62f swarm:latest "/swarm j --addr 1..." 20 seconds ago Up 19 seconds 2375/tcp shipyard-swarm-agent 9d2dd2bd5bff swarm:latest "/swarm m --replic..." 20 seconds ago Up 19 seconds 2375/tcp shipyard-swarm-manager 3435b5e2d13a shipyard/docker-proxy:latest "/usr/local/bin/run" 21 seconds ago Up 20 seconds 0.0.0.0:2375->2375/tcp shipyard-proxy 315ca39f00dd alpine "sh" 21 seconds ago Up 21 seconds shipyard-certs 564f25ac8130 microbox/etcd:latest "/bin/etcd -addr 1..." 22 seconds ago Up 21 seconds 0.0.0.0:4001->4001/tcp, 0.0.0.0:7001->7001/tcp shipyard-discovery bff634944376 rethinkdb "rethinkdb --bind all" 22 seconds ago Up 22 seconds 8080/tcp, 28015/tcp, 29015/tcp shipyard-rethinkdb 最後訪問http://172.16.60.218:8080,使用admin/shipyard使用者名稱和密碼登入即可. (注意:一鍵部署之後,需要稍等一會兒,8080埠才能起來) =================================================================================== 如果想要修改web訪問埠,則操作如下: [root@docker-218 ~]# cat shipyard-deploy |grep 8080 echo " PORT: specify the listen port for the controller (default: 8080)" SHIPYARD_PORT=${PORT:-8080} 比如將指令碼中預設的8080埠改為80埠 [root@docker-218 ~]# sed -i 's/8080/80/g' shipyard-deploy 然後重新部署即可
shipyard的web介面展示如下
刪除Shipyard環境操作
[root@docker-218 ~]# cat shipyard-deploy |ACTION=remove bash Removing Shipyard -> Removing Database -> Removing Discovery -> Removing Cert Volume -> Removing Proxy -> Removing Swarm Agent -> Removing Swarm Manager -> Removing Controller Done [root@docker-218 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Shipyard新增其他節點主機(centos7.X系統的主機)的操作記錄
比如將172.16.60.220機器節點加入到上面的shipyard管理中. 則需要在被加入節點機器上如下操作: 1) 在被加入的節點上按照上面的最新地址下載shipyard-deploy 2) 執行下面操作 (注意下面etcd地址要寫成shipyard部署機的ip地址. 首次執行時會自動下載映象,需要等待一段時間) [root@docker-220 ~]# cat shipyard-deploy| ACTION=node DISCOVERY=etcd://172.16.60.218:4001 bash ...... Node added to Swarm: 172.16.60.220 [root@docker-220 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65b7783d7e1e swarm:latest "/swarm j --addr 1..." 12 seconds ago Up 10 seconds 2375/tcp shipyard-swarm-agent 1b50c974b6e7 swarm:latest "/swarm m --replic..." 14 seconds ago Up 12 seconds 2375/tcp shipyard-swarm-manager 2514cf31947b shipyard/docker-proxy:latest "/usr/local/bin/run" 17 seconds ago Up 15 seconds 0.0.0.0:2375->2375/tcp shipyard-proxy bc9c79df1707 alpine "sh" 19 seconds ago Up 16 seconds 注意,新增節點時,上面一鍵指令碼需要執行在被新增的節點主機上,而不是shipyard部署節點的機器上. 然後登入http://172.16.60.218:8080,在"容器管理"-"主機節點"中看到新增的節點資訊了. 刪除節點機 [root@docker-220 ~]# cat shipyard-deploy |ACTION=remove bash -s Removing Shipyard -> Removing Database -> Removing Discovery -> Removing Cert Volume -> Removing Proxy -> Removing Swarm Agent -> Removing Swarm Manager -> Removing Controller Done [root@docker-220 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
需要注意:如果新增CentOS6.x系統的節要先升級kernel和docker
1) 升級核心 [root@docker-6 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@docker-6 ~]# uname -r 2.6.32-696.el6.x86_64 可以參考http://elrepo.org/tiki/tiki-index.php 根據系統版本選擇el源 先匯入公鑰 [root@docker-6 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@docker-6 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm 升級核心 [root@docker-6 ~]# yum --enablerepo=elrepo-kernel install kernel-lt -y 或者安裝 [root@docker-6 ~]# yum --enablerepo=elrepo-kernel install kernel-ml -y 修改Grub.conf [root@docker-6 ~]# vim /etc/grub.conf ..... default=0 //將此項的值由1改為0 重啟系統 [root@docker-6 ~]# init 6 重啟後再次檢視核心,發現已經升級了 [root@docker-6 ~]# uname -r 4.4.162-1.el6.elrepo.x86_64 2) 升級docker (如果之前部署了docker環境的話) 下面的docker二進位制檔案,百度雲盤下載地址: https://pan.baidu.com/s/1AWBbF-CXfXFkIIYs5DTCmA 提取密碼: a4r6 [root@docker-6 ~]# wget https://get.docker.com/builds/Linux/x86_64/docker-1.10.3 [root@docker-6 ~]# chmod 755 docker-1.9.1 //這是下載的docker二進位制檔案 停止docker服務 [root@docker-6 ~]# service docker stop 替換docker二進位制檔案 [root@docker-6 ~]# cp /usr/bin/docker /usr/bin/docker_bak [root@docker-6 ~]# cp docker-1.9.1 /usr/bin/docker 啟動docker服務 [root@docker-6 ~]# service docker start 下載shipyard一鍵部署指令碼 [root@docker-6 ~]# chmod 755 shipyard-deploy [root@docker-220 ~]# cat shipyard-deploy| ACTION=node DISCOVERY=etcd://172.16.60.218:4001 bash
Nginx做域名轉發: 在nginx配置檔案http塊裡新增如下程式碼:
upstream shipyard { server 172.16.60.218:8080; } server { listen 80; server_name kevin.shipyard.com; location / { proxy_pass http://shipyard; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 以下三行程式碼為nginx做WebSockets跳轉否則,在執行shell時會報400錯誤 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
利用shipyard部署swarm叢集及管理容器, 則swarm-manage為shipyard部署機, 其他swarm-node節點則為新增到shipyard管理中的節點.