【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,所以需要在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等。或者直接关闭防火墙

以上内容通过参考网上相关博客和自己实践整理,若有问题,欢迎指正、讨论!

原文地址:https://www.cnblogs.com/zhiqli/p/4946119.html