网络通信 频道

Docker持续部署图文详解(附实战视频)

    【IT168 技术】关于Docker的文章铺天盖地,但精品文章往往翻译居多。都说Docker天生适合持续集成/持续部署,但同样,可落地、实际可操作性的文章也很少见。

  基于这些情况,虽然我们专栏定位为运维管理性文字,但本篇是个特例,实操性的案例讲解——JAVA项目如何通过Docker实现持续部署(只需简单四步),即:

  ●开发同学通过git push上传代码,经Git和Jenkins配合,自动完成程序部署、发布,全程无需运维人员参与。 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:

  开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境(首先是测试/开发环境)。

  本文是cSphere Docker实战视频第二讲的文字版,本文联合作者@张春源同学(任职cSphere)即为视频主讲人,关于更多系列视频,详见https://csphere.cn/training。 

  难者不会,会者不难。通过简单的4个配置,即可优雅地实现持续部署。本文依惯例放上目录,请享用:

  1.   1、持续部署的技术思路

  2.   2、效果展示

  3.   3、配置Git和Jenkins联动

  4.   4、配置Jenkins自动更新代码

  5.   5、效果图文详解

  6.   6、FAQ

  好吧,我们正式开始。

  1. 持续部署的技术思路

  在本例中,假设我们JAVA项目的名称为hello。简要的技术思路如下。

Docker持续部署图文详解(附实战视频)

  本案例中假设代码托管在git.oschina.com上,Jenkins和Docker Registry(类似于yum源)各运行在一个Docker容器中。JAVA项目自己也单独运行在一个叫hello的容器中。

  本文采取的持续部署方案,是从私有的Docker Registry拉取代码,然后通过重建image来实现。这里Jenkins处于中心位置。就像长臂猿,在接收到Git的请求后,通过远程调用服务器Shell脚本,完成几乎所有功能。

  另外,有些变通的方案,把代码放在宿主机上,让容器通过卷组映射来读取。这种方法不建议的原因是,将代码拆分出容器,这违背了Docker的集装箱原则:

  这也导致装卸复杂度增加。从货运工人角度考虑,整体才是最经济的。这样,也才能实现真正意义的容器级迁移。

  或者说,容器时代,抛弃过去文件分发的思想,才是正途。本文最后的问答环节对此有更多阐述。

  容器即进程。我们采用上述方案做Docker持续部署的原因和意义,也在于此。容器的生命周期,应该远远短于虚拟机,容器出现问题,应该是立即杀掉,而不是试图恢复。

  2. 效果展示

  本文最后实现的效果,究竟有多惊艳呢?且看如下的演示。

  2.1 程序代码更新前的效果

  我们以时间戳来简洁、显式的表述程序更新情况。

  2.2 提交程序代码更新

  本例中,我们把首页的时间戳从201506181750,修改为201506191410(见如下)。

  2.3 上传新代码到Git

  顺序执行如下操作,输入正确的git账号密码。

Docker持续部署图文详解(附实战视频)

  然后呢?

  然后什么都不用做了。端杯茶(如果不喜欢咖啡的话),静静地等待自动部署的发生, 旁观一系列被自动触发的过程,机器人似的运转起来(请容稍候再加以描述)。

  为什么需要3~5分钟?只是因为本案例中的JAVA项目,需要从国外download Maven程序包,以供Jenkins调用和编译JAVA。正式应用环境中,可以把Maven源放在国内或机房。如果仅仅需要对PHP项目做持续部署,那就更快捷了。

  2.4 查看代码更新后的效果

  在静静地等待几分钟后,新的代码确实已经自动部署完毕。

Docker持续部署图文详解(附实战视频)

  那么,这一切怎么实现的呢?很复杂么?不然。只要按照如下几步,便可快速实现哦。

  3. 配置Git和Jenkins联动

  这个过程主要分为如下三步。

  3.1 Jenkins配置Git源

  Jenkins中新建项目java-app,并配置从Git拉取程序代码。具体如下:

Docker持续部署图文详解(附实战视频)

  3.2 Jenkins配置远程构建

  Jenkins中配置token,以供git远程调用时使用。

Docker持续部署图文详解(附实战视频)

  3.3 Git开启钩子

  怎么让Git在接收到用户更新的代码后,把消息和任务传递给Jenkins呢?这借助于Git的hook功能,配置起来也非常简单,如下。

Docker持续部署图文详解(附实战视频)

  4. 配置Jenkins自动更新代码

  Jenkins的主要工作是配置“远程构建”。在接收到Git传递过来的消息后,触发这个远程构建(到目标服务器),按照预定义的任务列表,执行一系列的工作,重建容器等。详见如下:

Docker持续部署图文详解(附实战视频)

  我们把其中最关键的Shell脚本内容摘抄出来。这些Docker相关操作,在第1部分“技术思路”已经提及,不再赘述。

Docker持续部署图文详解(附实战视频)

  

0
相关文章