16.3 容器化开发模式

传统模式中,开发团队在开发环境中完成软件开发,本地完成单元测试,测试通过,则可提交到代码版本管理库;测试团队打包进行进一步测试。运维团队把应用部署到测试环境,开发团队或测试团队再次进行测试,没问题后通知部署人员发布到生产环境。

在上述过程中涉及三个环境:开发、测试和生产,以及三个团队:开发、测试、运维。多个环境和多个团队之间的这种交互,很容易出现彼此环境不一致的情况,浪费不必要的人力物力。

在容器模式中,应用是以容器的形式存在,所有和该应用相关的依赖都会在容器中,因此移植非常方便,不会存在像传统模式那样的环境不一致的情况。

下面比较了两种模式下的不同流程,如图16-1所示。

1.操作流程

在容器化的应用中,项目架构师和开发人员的作用贯穿整个开发、测试、生产三个环节。

项目伊始,架构师根据项目预期创建好需要的基础base镜像,nginx、tomcat、mysql镜像或者将Dockerfile分发给所有开发人员,所有开发人员根据Dockerfile创建的容器或者从内部仓库下载的镜像进行开发,达到开发环境的充分一致。若开发过程中需要添加新的软件,只需要向架构师申请修改基础base镜像的Dockerfile即可。

开发任务结束后,架构师调整Dockerfile或者Docker镜像,然后分发给测试部门,测试部门马上就可以进行测试,消除了部署困难等难缠的问题。

16.3 容器化开发模式 - 图1

图16-1 传统模式vs容器模式下的工作流程比较

2.场景示例

假定对于一个200人左右的软件企业,主要使用Java作为开发语言,使用Tomcat、Weblogic作为中间件服务器,后台数据库使用Oracle、MySQL等。

在应用容器之前,开发到测试的流程如图16-2所示。

可见,就是因为环境的不一样,开发、测试、运维三个部门做了很多重复的工作。

而容器正好可以解决这个问题,大大简化了工作流程,如图16-3所示。

3.注意事项

首先,在开发和测试环境中,推荐使用-v共享文件夹来存储开发人员的程序代码,避免频繁打包操作。

其次,利用基础base镜像的继承特性来调整镜像的轻微变更。例如当需要测试程序对不同版本JDK的支持情况时,只需改变base镜像的JDK设置,然后其他依赖它的镜像在重新创建的过程中就可以自动完成更新。

最后,测试部门应当注意Docker以及镜像的版本,并经常对部署后的应用程序进行性能上的测试。

16.3 容器化开发模式 - 图2

图16-2 传统的开发流程

16.3 容器化开发模式 - 图3

图16-3 利用容器环境开发的流程