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,所以需要在FQ情况下执行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等。或者直接关闭防火墙