wKioL1fM2DrTC1MEAADYWCKNe4g804.jpg-wh_50

一、Docker的实现原理和技术前景

Docker技术是一门容器技术,于2013年正式开源发行,现在它已经成为了目前最流行的虚拟化技术,Docker的优点是“轻量型”,“可移植”,“自给自足”。

 

Docker大略执行思想如下:

1)  启动一个基础镜像(p_w_picpath),比如centos或者ubantu;

2)  Docker可以根据这个基础的p_w_picpath来构建成一个容器(container;

3)  在这个容器上,我们可以像在普通的服务器上编写需要的代码,并且启动编写好的服务(service);

4)  将这些已经编写好的、有服务的容器重新打包成镜像,这个镜像可以备用也可以放在网络上分享。

 

从上面几个操作步骤来看,Docker技术与虚拟机技术有类似的效果,同样达到在一个宿主机上运行多个子服务器的目的,而且每一个容器之间互不干扰,就像Docker的标志一样:一个大鲸鱼背上面有诸多个集装箱,这些集装箱就是装载各种服务的容器们,而这个大鲸鱼就是docker,它可以同时负载多个容器并且让这些容器平稳正常的运行,不管如此,docker容器的运行效率又是虚拟机的好多倍,可以迅速提升响应速度也是Docker备受开发人员和运维人员青睐的原因之一。Docker的引擎开发、二次管理以及安全策略也是时下非常火热的技术,可以说Docker 给运维带来了革命性的改变,大有深入乃至挖掘的必要性!

 

二、Docker的安装以及kirk的安装

Docker的安装对宿主机的内核有比较硬性的要求,Docker要求宿主机的内核是3.1.10。也就是说Docker应该工作在Centos 7以上的版本里,而不是我们传统购买的服务器Centos 6.5版本。由于目前阿里云和金山云的Centos 6.5默认自带的内核都是2.6.32,所以如果要在以上两个厂家的Centos 6.5里正常使用Docker的话需要我们自己升级内核。

 

Centos 7里安装Docker是十分简单的,只需要#yum install Docker,而启动Docker也是很简单的:#service Docker start,在运行之后我们可以查看一下当前Docker的版本:

wKiom1fM2GjiTBWnAABeT1OUIFw709.png

如果能像如图那样成功显示Docker的版本,即代表Docker已经安装且运行成功。


Kirk是七牛云提供的一个管理docker容器的工具,我们可以把七牛的账号用于kirk,使kirk专门存储内部的模块镜像,并且可以调用这些docker服务,它对应linux下载包的地址是http://7xqd3r.com1.z0.glb.clouddn.com/kirk/beta/latest/linux-amd64/kirk.tar.gz,下载完毕之后直接拆包解压即可使用。

 

三、整个P2P的服务启动过程

下面我将以P2P为例,演示一下启动P2P服务的过程:

当我们从开发人员手里获取到docker file,并且将其build成一个可使用的镜像之后。

  1)  登陆kirk账户

在七牛网站右上角的“个人面板”点击“密钥管理”,就会看到一对密码分别是AK/SK,如图所示:

wKioL1fM2K-jQFiDAACKHnHqPzU463.png-wh_50

在服务器端输入#kirk login就是登陆kirk账号,这里就对应输入AKSK,输入正确的话就是提示登入成功。

2)使用#kirk p_w_picpaths来查看kirk里所有的镜像:

wKioL1fNE6bTAuTWAAKBvtJASEc665.png

        看到现在的kirk里面已经有不少的docker  P2P镜像,而且后面分别是这些镜像建立的时间点,我们这里需要的是p2prelay服务,于是我们只需要启动它,但是要注意,在docker里一个镜像是可以生成多个容器的,这些容器在出生阶段是一模一样的。但是在kirk里一个镜像只能生成一个服务(service),如果重复的打开同一个服务,会报错ERROR fail to start service: {"code":400,"codeName":"E30014","description":"current state is invalid to start service"}

,查看当前运行容器的命令是#kirk ps,因为这是一个新装的机器,所以#kirk ps结果为空。


  我们要启动服务的话,需要先启动七牛的工具,#kirk service qiniu-tool,然后再如法炮制分别启动对应的服务,比如启动relay-1relay-2gms等等,如图所示:

wKiom1fM2TTyjDraAABxF6boAdo356.png

如果这个时候想进入到relay-1这个容器里面看一下,就使用#kirk ssh relay-1这个命令:

wKiom1fM2SnR6mXlAABX1sud-5A004.png

       这里发现hostname发生了变化,变成的10-128-128-113恰巧就是relay-1对应的那个container编码,在容器里这个P2PRelay已经完全启动了。

 

   如果想要退出当前容器,使用命令#exit就返回宿主机,继续宿主机的操作。


四、校验

  启动服务之后,我们登陆到容器relay-1,容器就相当于是一个虚拟机,那么在这个小虚拟机里是可以查看进程的,使用#ps –ef一下可以查看进程,而且还可检查一下端口以及看一下其他的服务:

wKioL1fNE_fQ_LatAADybDhFxtQ794.png

     由于这台P2P只是试验,所以bind count和angets num都是零,但是依旧可以看出服务和端口已经是正确的了。

       但是目前七牛的kirk还是有一点问题:它只能把容器挂载到宿主机的文件夹上,而不能实现把容器挂载到其他云服务器的文件夹上,这一点在模块的升级上有所不便,与七牛技术人员沟通,他们反馈目前在做一个类似网络云盘共享的开发,预计将来可以通过此途径解决这个问题。但是在目前阶段,如果涉及到模块的更新,就需要重新编写一个p_w_picpath,重新build成镜像,这一点与原有的从挂载盘上拷贝更新脚本有很大的不同。


五、对比

在传统的运维部署下,运维人员需要做的事情如下:

1)  购买云服务器,对应填写服务器ip表格;

2)  初始化服务器,金山区服务器还需要挂载数据盘;

3)  检查角色,运行模块安装脚本;

4)  将服务器内网ip添加到zk配置里;

5)  启动进程,检查zk、模块、看门狗是否都已经启动;

6)  检查日志情况;

而在docker-kirk的环境下,运维部署模块的步骤:

1)  购买云服务器,对应填写服务器ip表格;

2) 运维人员得到开发人员的dockerfile,将其build成一个镜像;

3)  使用kirk上传其镜像到七牛云;

4)  kirk启动对应的服务;

5)  根据不同的ip需求配置ip端口;

6)  登陆容器内部,检查进程、zk、看门狗;

7)  检查日志情况。

 

从上所见,在docker-kirk过程里省去了脚本这一步,传统模式下由于开发人员模块编写语言各有不同,有的是java模块,有的是tomcat模块,因此在启动上和后台所需环境版本上均有差异,有的甚至在看门狗的配置上都有差异,而这些差异都是需要运维人员手动去修改脚本,而使用了docker-kirk,就可以将2、3、4步整合成一个脚本,然后通过运行脚本直接将已经配置好的镜像生成到容器里部署到服务器里使用,这样更加便捷从而提升了效率。


但是kirkip配置是一个难点,而且批量端口影射服务尚不完善,这些都有待七牛开发人员后续跟进补全。


六、总结 

   如果引用Docker技术的话,我们将来可以依旧使用阿里云、金山云的跳板机去登录相对性能较低的云服务器,同时在服务器上安装七牛的kirk工具,同时根据不同的模块需求购买对应性能的七牛云服务,七牛云服务提供硬件环境,kirk作为工具,这样两者双剑合并来增删改用各种Docker镜像,从而启动各种进程。

  目前测试看来Docker的优点如下:

  1         保证线上与测试的环境一致,省去了中间配置各种环境的麻烦,甚至可以在同一个服务器上安装不同独立的服务;

2         快速部署,传统的部署模式是:安装(包管理工具或者源码包编译)->配置->运行;Docker的部署模式是:复制->运行;

3         对云计算更加方便和友好。

而其缺点如下:

1       目前尚不支持传统意义上的挂载,升级的时候需要重做镜像;

2       网络机制比较复杂,导致其大型部署比较麻烦,甚至会出现失控情况;

3       一些运维常见功能比如crontab需要事前增加到Dockerfile里;

4  目前kirk不支持退出当前账号的功能;