前言
由于我們的一部分服務(wù)器达舒,分布在不同的公共網(wǎng)絡(luò)環(huán)境。而且腻贰,這些服務(wù)器程序吁恍,發(fā)布都使用了docker,但并沒有使用k8s這樣的工具。處于離散的管理狀態(tài)冀瓦。 也考慮過rancher這樣的工具伴奥,但對于我們來說還是太重了。我需要一個更輕量的管理工具翼闽。因此docker-manager和docker-agent就誕生了拾徙。
結(jié)構(gòu)圖
相關(guān)項目
前端項目: https://github.com/xiaojun207/docker-manager-page
Docker-agent: https://github.com/xiaojun207/docker-agent
功能簡述
基于docker的多主機容器web管理,數(shù)據(jù)默認存儲為sqlit3肄程,也就是說锣吼,docker-manger啟動可以不依賴其他組件。
總覽蓝厌,包括:服務(wù)器數(shù)量玄叠、運行容器數(shù)量、容器總數(shù)量拓提、應(yīng)用數(shù)量读恃、下發(fā)任務(wù)數(shù)量、實時日志開啟數(shù)量
所有容器展示代态,包括:容器名稱寺惫,id、所在服務(wù)器蹦疑、使用鏡像西雀、端口、創(chuàng)建時間
啟動容器歉摧、刪除容器艇肴、重新啟動
容器狀態(tài)信息,包括:cpu使用叁温、內(nèi)存使用再悼、網(wǎng)絡(luò)使用
發(fā)布新的容器到目標服務(wù)器
容器實時日志(如果有的話),相當(dāng)于docker logs -f --tail 10 容器名膝但,比較耗資源冲九,僅臨時查看日志用比較好(該功能不支持集群部署)
服務(wù)器資產(chǎn)展示,主要包括:容器總數(shù)量跟束、運行容器數(shù)量莺奸、cpu使用、內(nèi)存使用冀宴、docker版本憾筏、docker-agent是否在線(該功能不支持集群部署)
用戶管理,對管理員和docker-agent賬號花鹅、密碼氧腰、狀態(tài)管理
訪問白名單IP設(shè)置
部分界面
快速啟動
docker pull xiaojun207/docker-manager:latest
docker ps -aq --filter "name=docker-manager" | grep -q . && docker stop docker-manager && docker rm -fv docker-manager
docker run -d --name docker-manager -p 8068:8068 -v /app/docker-manager/data:/app/data xiaojun207/docker-manager:latest
或者
docker run -d --name docker-manager -p 8068:8068 -e driveName=mysql -e dataSourceUrl='root:password@(dbhost:3306)/dbname?charset=utf8' xiaojun207/docker-manager:latest
參數(shù)說明:
參數(shù)????是否必填????默認值說明
driveName????否????sqlite3也可以是mysql,如果是mysql,則dataSourceUrl必須配置
dataSourceUrl????否????/app/data/database.db數(shù)據(jù)庫連接url
古拴,當(dāng)driveName為sqlite3時箩帚,dataSourceUrl默認為:data/database.db(即/app/data/database.db),
當(dāng)driveName為mysql時黄痪,dataSourceUrl則必填紧帕,例如:-e dataSourceUrl='root:password@(dbhost:3306)/dbname?charset=utf8'
useCache????否????false是否啟用本地緩存,單機部署的時候啟用桅打,集群部署請不要啟用
consoleCode????否????false是否啟用控制臺驗證碼是嗜,管理員找回密碼時,請設(shè)置consoleCode=true
也可以進入到容器內(nèi)部挺尾,利用配置文件/app/config.yml鹅搪。
配置參數(shù)優(yōu)先級:
[代碼] < [配置文件(./config.yml)] < [命令行參數(shù) (或 docker -e)]
登錄賬號
初次啟動,程序會自動創(chuàng)建管理員賬號(admin)遭铺、客戶端賬號(agent)丽柿,用戶名密碼,會打印到日志輸出中魂挂。(僅顯示一次甫题,請做好備份) - admin - agent
數(shù)據(jù)存儲(可選)
數(shù)據(jù)默認存儲為內(nèi)嵌sqlit3,也就是說涂召,docker-manger啟動可以不依賴其他組件坠非,也可以是mysql。
配置好數(shù)據(jù)庫連接參數(shù)果正,數(shù)據(jù)庫表會自動創(chuàng)建和更新炎码。
配置參數(shù): driveName、dataSourceUrl
sqlite3 ( 默認 )
配置sqlite3的如下
-e driveName=sqlit3 -e dataSourceUrl='/app/data/database.db'
mysql
配置mysql的如下
-e driveName=mysql -e dataSourceUrl='root:password@(dbhost:3306)/dbname?charset=utf8'
目前來說舱卡,在mysql5.6.44和mysql8.0兩個版本上都運行正常
Nginx代理設(shè)置
需特別注意websocket相關(guān)內(nèi)容
eg.:
real_ip_header X-Forwarded-For;
real_ip_recursive on;
map $http_upgrade $connection_upgrade {
????default upgrade;
????''? ? ? close;
}
map $http_x_forwarded_for $ClientRealIP {
????""? $remote_addr;
????~^(?P[0-9\.]+),?.*$? $firstAddr;
}
server {
????listen 80;
????server_name dockermanager.com;
????client_max_body_size 1000m;
????location / {
????????proxy_set_header Host $host;
????????proxy_set_header X-Real-IP $ClientRealIP;
????????proxy_set_header X-Forwarded-For? $http_x_forwarded_for;
????????proxy_http_version 1.1;
????????proxy_set_header Upgrade $http_upgrade; # websocket
????????proxy_set_header Connection $connection_upgrade; # websocket
????????proxy_pass http://dockermgr_api;
????}
}
客戶端(docker-agent)
docker pull xiaojun207/docker-agent:latest
docker run -d --name docker-agent -v /var/run/docker.sock:/var/run/docker.sock -e DockerServer="http://192.168.1.200:8068/dockerMgrApi/agent" -e Username="agent" -e Password="12345678" -e HostIp="192.168.1.6" xiaojun207/docker-agent:latest
需配合xiaojun207/docker-agent鏡像使用,docker-agent的具體使用方法队萤,請參見其docker-agent使用說明
特別說明: 每臺服務(wù)器(docker-agent的宿主機)的hostname轮锥,必須唯一