基于Dokcer技术 对Web应用的持续集成探究

简介: 摘要传统的虚拟化技术仅提供了从物理机到操作系统级的虚拟化服务,而正在如火如荼发展的Docker容器技术做到了在系统级虚拟化之上,对应用服务进行方便的管理。

摘要

传统的虚拟化技术仅提供了从物理机到操作系统级的虚拟化服务,而正在如火如荼发展的Docker容器技术做到了在系统级虚拟化之上,对应用服务进行方便的管理。但是当开发者需要测试和上线Web应用时,由于版本迭代问题,常需要手动进行重新部署。本文基于Docker对于应用服务的快速发布和部署能力,结合已有的jenkins持续集成服务,尝试对Web应用的持续集成进行探究。

正文

持续集成既能够实现代码频繁集成,进行频繁迭代测试,通过频繁构建尽发现问题,从而在保证软件质量的同时加速软件开发的过程。

持续集成不是用来防止代码缺陷的出现,但是它能够在软件开发前期尽早发现代码缺陷,使修复缺陷变得相对轻松简单。

Jenkins就是一个持续集成的开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。其基本工作流程如图1所示,开发者提交代码更新,Jenkins通过钩子监听源码管理工具获取最新代码。根据创建好的Jenkins任务及编写好的执行脚本依次完成代码构建、打包、部署、集成测试过程,最后把构建后的结果包括自动化测试的结果通过邮件发送给相关负责人。

图1.png

而Docker 是一个基于LXC(Linux Containers)虚拟化技术的高级容器引擎,使用Go语言实现的一种面向云平台的虚拟化技术。它是一款开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。因此它具有启动时间短,空间占用少、分发和复制方便、资源开销少等特点,却具备和传统虚拟机一样的隔离性和安全性。

在这里的代码更新和版本控制过程中,使用Git工具来作为代码同步更新工具。开发人员完成本地代码开发后,先通过命令或Git工具把代码提交到分支上,再将分支代码推送到项目经理处进行代码审核,审核成功后再把代码推送到主干。一旦Git仓库有更新后,Jenkins服务器会拉取新代码进行集成构建。Github的主要工作模式如图2所示。

图2.png

这里有一个需要注意的是,Docker 跟Jenkins并没有直接的联系,Jenkins是实现自动打包的,打包完也是可以实现自动部署的,并不是没有Docker 就不可以实现自动部署了,这里需要强调一点。之所以用Docker,是因为Docker 是一个相比较而言比较成熟的一种技术,而且它的优势在于,可以实现隔离,可以在不同的操作系统跑应用(Windows,Linux)并且还可以做到日志分离。

传统的Web应用从开发到上线的过程,需要开发者手动将开发好的工程部署到服务器上。在服务器上的相关环境和配置都需要开发者自己动手进行解决,同时需要解决很多形形色色与Web服务本身可能没有太大关系的问题。另外,如果开发者对于开发版本有修改和迭代更新,每次需要手动去在服务器上更新代码,并且如果是一个负载均衡集群的场景下,需要一台一台服务器进行更新代码,这样的工作量是很大的,并且都是重复性的劳动。

在这里,通过已有资料和文献,结合Jenkins和Docker各自的优点,探究两者集成后对Web自动部署快捷性方面的作用,简化Web部署为以下流程:

  1. 提交代码

  2. 获取代码

  3. 构建环境

  4. 自动部署

Jenkins是基于Java环境的,因此在宿主机中需要安装Java环境支持,另外,宿主机中还需要安装Git工具和Docker。此处的系统实验环境为Centos7.4。

图3.png

首先安装Java环境,这里使用Java1.8的版本,查看版本可以看到,具体的安装版本是

图4.png

并且由于Jenkins需要Tomcat的支持,同时下载Tomcat9的版本进行安装。

图5.png
图6.png

接下来下载Jenkins的war包,war包内是Jenkins的所有内容。可以通过直接部署在安装好的Tomcat9中来通过Web形式访问。Jenkins第一次启动需要进行安装,包括其中的Folders Plugin、Script Security Plugin等插件,安装完成后需要进行用户配置,用户名和密码是自定义的。

图7.png
图8.png
图9.png

Git工具是必不可少的,由于对于版本没有太大的要求,可以直接通过自带的yum包管理进行下载,安装git。通过在Github上建立一个测试工程,向此测试工程中更新推送Web服务的代码,Jenkins通过监听指定的Github地址,来自动获取Github上的最新代码,自动执行Shell来调用Docker进行代码到镜像的部署和启动工作。

图10.png

最重要的是Docker的安装和基础镜像的搭建。由于Centos7中带的yum源中,docker版本已经是比较新的1.12,可以直接通过yum install docker.io来安装。安装完成之后,需要为持续集成部署的Web服务提供一个基础的网站服务器环境镜像,之后的Jenkins工作可以直接基于此已有的基础镜像来进行。

由于仅仅是探究Docker和Jenkins的结合,这里仅仅使用静态页面的更新来进行测试,因此基础环境不使用Tomcat和Java的JDK,而是选择一个nginx的环境。


图11.png

通过docker search nginx命令来查找hub上已经存在的nginx环境镜像,选定一个nginx环境镜像,下载此已有的nginx环境镜像,在此基础上进行修改,可以较快速地得到可以用于部署Web的环境。

图12.png

在Git工具、Docker以及Jenkins都已经安装完成并且准备就绪后,可以开始集成和整合。首先需要在Jenkins中创建一个工程,并且将其命名为test。在这里,接下里的配置文件中可以通过设置hook以及定时器来定时检测指定的Github项目的更新变化,进行触发拉取动作,如图14中的第一个和最后一个选项。在这里,因为仅仅是测试,不开启自动拉取,使用执行构建。

图13.png

配置的最后,是可以在项目拉取完成和构建后,执行的shell命令配置。而这段shell的配置,是在这里探究Jenkins和Docker集成进行Web自动部署的关键之处。

在nginx镜像中,使用的nginx的html默认目录在/usr/share/nginx/html下。Jenkins的默认代码下载在/root/.jenkins/workspace/下,因此在每次Jenkins从Github上获得更新代码后,直接执行shell脚本,将下载的Web的代码的路径映射到nginx镜像中的html默认目录中即可。并且在每次执行shell时,都先删除docker中上一次已经运行的实例容器,进行新的目录内容映射后,再次创建新的容器。

图片.png

因此最后形成的完整shell代码如图14,保存后配置生效。

图14.png

最后进行Web应用的自动部署测试。在Github新建一个项目,内容只有一个test.html,内容是“jenkins测试”。在Jenkins的test工程配置中添加此git地址,并且保存配置。


图15.png
图16.png

配置保存后执行构建,构建完成后访问页面,得到内容为“jenkins测试”,如图17。

图17.png

开发本地修改test.html的内容为“测试持续集成”后,使用git push向github更新代码,并且再次在Jenkins上构建,再次访问服务器后,网页内容已经更换。查看Jenkins输出日志和页面结果如图21、图22。

图18.png
图19.png
图20.png
图21.png

通过上述Jenkins和Docker配合Git实现Web应用的快速部署更新,可以看到其效率可以大幅提高。开发者只需要向Git项目地址提交代码,Jenkins执行构建即可自动完成部署等操作,并且如果在Jenkins中配置了Hook钩子和定时器抓取的设置,身子可以节省手动Jenkins的构建过程,给开发者的开发和Web应用服务的部署带来了极大的便利。

参考文献:

尹高. 基于Docker的服务器运维平台的设计与实现[D]. 华中科技大学, 2016.

边俊峰. 基于Docker的资源调度及应用容器集群管理系统设计与实现[D]. 山东大学, 2017.

钟良侃. Docker技术在Web服务系统中的应用研究[J]. 电脑知识与技术, 2016, 12(26):123-126.

张力文. 基于Jenkins的项目持续集成方案研究与实现[D]. 西南交通大学, 2017.

目录
相关文章
|
10天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
21 2
|
15天前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
32 3
|
8天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
20 1
|
11天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
16 3
|
11天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
27 2
|
11天前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
29 1
|
11天前
|
安全 测试技术 数据安全/隐私保护
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
|
11天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
42 2
|
11天前
|
API 持续交付 PHP
PHP在现代Web开发中的应用与未来展望####
【10月更文挑战第25天】 本文深入探讨了PHP作为服务器端脚本语言在现代Web开发中的关键作用,分析了其持续流行的原因,并展望了PHP在未来技术趋势中的发展方向。通过实例解析和对比分析,揭示了PHP如何适应快速变化的技术环境,保持其在动态网站构建中的核心地位。 ####
|
12天前
|
监控 前端开发 JavaScript
前端技术探索:构建高效、可维护的Web应用
【10月更文挑战第23天】前端技术探索:构建高效、可维护的Web应用
30 0
下一篇
无影云桌面