Docker的命令行操作已經非常方便,不過容器多了難免不方便,如果有web系統來管理、監控則對運維來說會更方便一些。這方面的選擇也比較多,比如Docker UI、Shipyard等。因為shipyard支持多主機、集群管理。所以我們選擇了shipyard來進行容器管理。
在網上找到有關shipyard的資料除了官網和git。其他大部分資料都是老版本python實現相關的,而現在已經采用go + Angular.js + semantic UI實現。
shipyard是在Docker Swarm實現對容器、鏡像、docker集群、倉庫、節點進行管理的web系統。采用golang調用Docker Remote API和angular.js+semantic UI實現web開發的。
shipyard部署
shipyard的部署非常簡單,官方提供了在線的腳本通過命令進行安裝,使用
curl -s https://shipyard-project.com/deploy | bash -s
命令進行安裝即可。
deploy實際上是一個shell腳本,實現docker run啟動shipyard依賴的容器。如果覺得每次通過curl啟動不方便也可以將這個腳本下載到本地磁盤進行操作。
啟動完成以后,在瀏覽器輸入http://host:8080即可訪問,默認用戶名為admin密碼為shipyard。
注意:由於deploy在執行時需要訪問/var/run/docker.sock,所以需要root權限,或者為該文件添加權限。
shipyard的生態
shipyard是由shipyard控制器以及周圍生態系統構成,以下按照deploy啟動順序進行介紹。
- RethinkDB
deploy首先啟動的就是RethinkDB容器,shipyard采用RethinkDB作為數據庫來保存用戶等信息
- Discovery
為了使用Swarm,我們需要一個外部的密鑰值存儲群容器,shipyard默認是采用了etcd。
- shipyard_certs
證書管理容器,實現證書驗證功能
-
Proxy
默認情況下,Docker引擎只監聽Socket,我們可以重新配置引擎使用TLS或者使用一個代理容器,轉發請求從TCP到Docker監聽的UNIX Socket。
-
Swarm Manager
Swarm管理器
-
Swarm Agent
Swarm代理,運行在每個節點上。
- Controller
shipyard控制器,Remote API的實現和web的實現。
其他操作
執行
curl -sSL https://shipyard-project.com/deploy | bash -s -- -h
可以看到deploy的使用幫助介紹
可以通過在命令后面帶上選項,實現其他功能。
- 使用自定義shipyard鏡像
curl -sSL https://shipyard-project.com/deploy | IMAGE=shipyard/shipyard:test bash -s
- 添加節點
curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://10.0.1.10:4001 bash -s
- 刪除容器
curl -sSL https://shipyard-project.com/deploy | ACTION=remove
- 升級容器
curl -sSL https://shipyard-project.com/deploy | ACTION=upgrade
代碼結構
從git下載到shipyard源碼以后,可以看到代碼目錄下的結構。
自定義編譯
官方的shipyard在實際應用中總有不夠完善的地方,比如漢化、比如部署容器時,鏡像竟然不能選擇而得手動輸入鏡像名,等等。如果涉及到修改以后如何編譯,build自定義image的問題。
環境部署
- go開發環境
網上參考文章比較多,ubuntu下可以參考這篇
- 安裝Godep
go get github.com/tools/godep
- 安裝npm
yum install npm或apt-get install npm
- bower
npm install -g bower
docker-compose打包
- docker-compose安裝
sudo curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-
uname -s
-uname -m
> /usr/local/bin/docker-compose
在shipyard目錄下直接執行docker-compose up
即可,會編譯控制前,建立shipyard鏡像,然后啟動shipyard。
用現有docker-compose.yml生成的controller包括shipyard和media鏡像,體積都非常大,達到900M+,具體原因沒去深究,所以還是不建議用此方法。
單獨編譯shipyard
- controller
按照官方提供的make build編譯,在提交git步驟一直不對,只是本地開發,則可以直接打開Makefie,找到build選項,使用
godep go build -a -tags "netgo static_build" -installsuffix netgo
到controller目錄下編譯即可,不提commit到git。編譯完成后,在目錄下會生成一個controller可執行文件,可以./controller -h
測試是否編譯成功。
說明
因為代碼中很多包是直接從git code.google import,所以需要在翻牆情況下執行go get . 將這些包下載到本地目錄。不知道為何code.google的代碼無法自動下載,只有通過hg從code.google下載了。
首先安裝mercurial,使用yum install hg即可。
如果通過代碼安裝mercurial則按照以下步驟
wget http://mercurial.selenic.com/release/mercurial-1.4.1.tar.gz tar –zvxf mercurial-1.4.1.tar.gz cd mercurial-1.4.1 make install
如果安裝提示找不到文件‘Python.h’ 則需要安裝 python-devel
apt-get install python-devel
添加環境變量export PYTHONPATH=/usr/local/lib64/python2.6/site-packages
安裝完成后使用
hg clone https://code.google.com/p/go.crypto/
將代碼下載下來。
- web頁面編譯
web頁面的編譯直接使用官方提供的make media即可。編譯完成可以看到controller/static目錄下多了bower_components目錄。
- 構建鏡像
在controller有提供Dockerfile,直接執行
docker build .
即可。
附
說明
在應用中,官方提供的在線部署方法有時候不行,可能是由於網絡原因造成,解決方法可以將deploy下載下來執行,也可以對deploy進行修改。
為了符合我的使用習慣,我對deploy官方代碼修改成短參數形式。
遇到的問題
在centos啟動時,總是一直處於等待狀態,后查明應該是防火牆的原因,導致一些應用無法訪問,解決的辦法是打開用到的端口,如4001等。或者直接關閉防火牆