【Docker】Docker學習筆記:shipyard使用


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等。或者直接關閉防火牆

以上內容通過參考網上相關博客和自己實踐整理,若有問題,歡迎指正、討論!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM