基于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.

目录
相关文章
|
26天前
|
存储 监控 安全
如何在Python Web开发中确保应用的安全性?
如何在Python Web开发中确保应用的安全性?
|
7天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
29 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
12天前
|
机器学习/深度学习 自然语言处理 监控
智能客服系统集成技术解析和价值点梳理
在 2024 年的智能客服系统领域,合力亿捷等服务商凭借其卓越的技术实力引领潮流,它们均积极应用最新的大模型技术,推动智能客服的进步。
48 7
|
20天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
29 6
|
20天前
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
25 5
|
23天前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
37 4
|
23天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
35 2
|
26天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
27天前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
40 3
|
27天前
|
缓存 安全 前端开发
构建高效Web应用的五大关键技术
【10月更文挑战第42天】在数字化浪潮中,Web应用已成为企业与用户互动的重要桥梁。本文将深入探讨提升Web应用性能和用户体验的五项核心技术,包括前端优化、后端架构设计、数据库管理、安全性增强以及API开发的最佳实践。通过这些技术的应用,开发者可以构建出更快、更稳定且更安全的Web应用,满足现代网络环境的需求。

热门文章

最新文章