基于Docker的高校在线虚拟实验平台设计与实现
2022-07-07赵莲芬林志煌
赵莲芬 林志煌
(广州软件学院 广东省广州市 510990)
1 引言
在线虚拟实验室最早出现在上世纪80年代,它的主要原理是使用虚拟化技术实现模拟不同实验工具的平台。
高校在新工科专业(移动互联网、云计算、大数据、人工智能)教学中最大的问题是无法对基础实验环境进行快速部署,配置难度较高。每次软件更新或者版本升级实验员就要安装多种实验工具和软件,安装过程繁琐、配置工作量极大,实验过程中也因为实验环境的问题增加教师和学生的负担。
国内也有部分在线实验系统平台,但这些平台大部分是商用的,而且主要针对某些特定的领域,对高校新工科在线实验的支持有局限性,而且这些在线实验系统多基于传统虚拟架构的,资源利用率不高,访问速度和响应时间需要进一步优化。对于高校来说,需要一个面向用户的开放的轻量级的在线虚拟实验平台,从而为用户提供一个良好的实验环境。
基于Docker容器技术的轻量级在线虚拟实验平台能够让学生节省搭建基础实验环境的时间,从而更加专注的进行学习。该平台的主要优点是能为所有学生提供同样的基础实验环境,从而保持实验的一致性,减少兼容性的影响,提高实验的效率。同时,该平台能够提供个性化的学习方式,学生可以随时随地根据自己的个人需求选择合适的学习模块进行在线实验,能够极大的提升学生学习的兴趣和效率,因此基于Docker容器技术的轻量级在线虚拟实验平台构建研究具有重要的意义。
和传统虚拟实验平台的区别是在线虚拟实验平台突破了时空限制,只要能够联网,任何学生都能够轻易的随时随地进行自己感兴趣的在线实验或者研究,在线实验平台同时可以提供实验和资源的共享,这种共享可以基于校内或者校外,提供随时随地在线学习和实践资源,培养实践能力和自主创新能力。因此,基于Docker容器化技术的轻量级在线实验平台具备灵活和共享等优势,能够极大的节约资源,提高学生的学习效率以及综合实践能力。
2 传统虚架构与Docker容器化架构的区别
传统的基于虚拟机架构的实验平台实现了操作系统级别的隔离,它的实现方式是在硬件上安装虚拟机来管理多种软件操作系统,但是这没有很好的解决新工科专业实验环境的模块化快速统一弹性部署、随时随地在线实践以及降低实验室建设成本等方面的问题。
Docker 是一个开源的应用容器引擎,可以把该引擎看作实现轻量级虚拟化的一种方式,它允许用户依赖该引擎把自己的应用以及应用依赖的基础环境打包封装到一起,然后发布到自己的应用服务器上,而且不同的应用和基础环境都可以单独打包封装,相互之间不受影响。
Docker容器本质上是可配置的轻量级虚拟机,它能够实现共享底层的操作系统和硬件资源,为上层的开发人员提供应用组件服务,比如镜像迁移、网络各类负载均衡等,同时可以根据用户需求进行增加、修改或删除组件,实现弹性分配和使用,尤其适合构建新工科专业复杂多变的细粒度的实验环境的新需求。
基于Docker容器架构技术实现在线虚拟实验平台的优势在于可以实现应用的快速部署,良好的弹性扩展能力,迅速响应能力,跨平台迁移扩展能力等,尤其适合高校新工科专业构建弹性化需求的在线实验平台,而且不同Docker容器直接相互独立,互不影响。传统虚拟化实验架构和基于Docker容器的虚拟化架构比较如图1所示。
图1:传统虚拟架构和Docker容器化虚拟架构比较图
传统虚拟化实验架构和基于Docker容器的虚拟化架构的区别在于它的实现方式不同。传统虚拟实验架构需要在每一个虚拟节点部署操作系统,然后在操作系统上在部署相应的应用程序;而Docker容器架构则不需要,它的应用程序是直接运行在共享的宿主机的软硬件资源上,每一个被封装的应用程序和依赖包之间互不影响,相互隔离,独立运行在未经虚拟化的软硬件资源上,因此,它们比传统架构的虚拟机更轻便。
3 系统需求分析
基于Docker容器化技术的高校在线实验平台角色主要分为管理员、教师和学生。在线实验平台系统需求分析用例如图2所示。
图2:系统需求分析用例图
各角色的功能描述如下:
学生:鉴权登录、查看实验列表、连接远程主机、断开主机连接、上传下载文件、实验完成检查、刷新实验主机、查看实验文档、退出登录。
教师:鉴权登录功能、查看实验列表、连接远程主机、断开主机连接、上传下载文件、实验发布、实验管理、实验文档查看、刷新实验主机、查看实验文档、退出登录。
管理员:鉴权登录功能、连接管理、主机管理、实验管理、环境管理、新建实验环境、用户管理、登录。
4 系统设计
4.1 系统架构设计
本实验平台基于混合云环境,充分发挥了公有云和私有云两类云平台的优势,扩展了本实验平台的技术基础,提高平台的可用性与便捷性,降低了信息化投入成本同时保障了数据的安全性,利用Docker容器技术和Web技术,将传统的实验室机房环境转移至云环境中,学生只需要在浏览器就能使用云主机进行课程的实验。基于Docker容器的在线编程平台的架构如图3所示。
图3:在线实验平台架构
4.2 系统功能设计
在实验过程中,学生不仅可以根据教师上传的实验指导书和建立的云实验环境进行实验,而且可以编辑实验笔记,保存或上传实验结果。该平台还提供实验社区、综合协作实验、实验资源和系统资源的监控管理等。系统功能结构如图4所示。
图4:系统功能设计
用户端主要功能有:用户通过鉴权登录编程平台,查看实验列表、连接远程主机、断开主机连接、上传下载文件、实验完成检查、刷新实验主机、查看实验文档。
教师通过鉴权登录到教师端,可查看实验列表、连接远程主机、断开主机连接、上传下载文件、实验发布、实验管理、实验文档查看、刷新实验主机、查看实验文档。
管理员可进行连接管理、主机管理、实验管理、环境管理、新建实验环境、用户管理。
5 系统功能实现
远程功能通过在浏览器中展示云连接页面实现,具体的实现方式分为前端用户交互功能及后端服务功能两个部分。
在线开发的功能是将服务器中运行的集成开发工具环境(IDE)编辑器在浏览器中展示出来,并且通过浏览器进行交互,在线实验平台最基础的实验环境是通过在服务器运行Code-Server实现了在浏览器展示服务器上运行的IDE工具,Code-Server是大名鼎鼎的桌面端IDE工具vscode的服务器版本。Code-Server的工作原理是通过在服务器中运行IDE工具,再使用基于Websocket协议实现的novnc技术就可以实现在浏览器中访问服务器即可展示IDE工具页面,在线实验平台的其他实验环境也都是基于novnc技术实现。
在实现了浏览器连接云服务器功能后,还需要实现多用户同时在线开发,且彼此间的实验环境互不干扰,就需要每个用户连接一台独立的服务器。本实验平台使用Docker容器技术来实现在一台服务器上运行多个实验环境的功能,docker底层使用了LXC来实现,这种技术能够有效控制各进程资源的分配,并且能够使进程之间相互隔离。
5.1 前端用户交互功能实现
在线实验平台(简称Codelab)为用户提供了一些基础实验环境,这些环境对应的就是服务器中的Docker镜像,在用户发布实验时,用户选择的基础镜像的ID将会保存在数据库中,在其他用户进行该实验时,后端收到前端传来的数据就会执行指定语句,根据数据中的镜像信息运行容器,且根据一个端口分配算法为生成的容器映射一个端口,使得用户可以在浏览器中访问服务器IP的某一个端口就可以连接上容器中运行的服务。在服务器生成容器并分配好端口后,将端口与服务器域名拼接为一个完整地址后返回前端,前端收到地址后访问该地址即可。用户连接远程主机流程如图5所示。
图5:用户连接远程主机流程图
5.2 后端服务功能实现
后端创建连接的过程分为以下七步:
(1)创建当前连接的随机码;
(2)根据前端发送的实验信息查询实验对应的环境和端口;
(3)为容器分配端口号;
(4)通过执行命令创建容器,容器的文件夹挂载在以随机码命名的文件夹;
(5)为新建的容器设置预设文件;
(6)设置定时任务,在实验时间结束后删除容器并修改数据库状态;
(7)创建成功后拼接协议,域名和端口号为完整url地址后返回给前端。
6 结论
本文针对在线实验教学平台基础实验环境配置效率低,导致资源利用率和实践教学效率不高的问题,基于Docker容器化技术设计与实现了一个适用于高校的在线轻量级虚拟实验教学平台,该平台能够以组件化形式有效构建高校新工科专业的实验教学环境,并且实现按需配置,能够实现实验环境集中在线统一部署管理,实现按需动态调整版本,弹性分配资源,提高软硬件资源的复用性和可用性,提升学生的学习兴趣和效率,提高实践教学质量。对基于Docker技术的在线实验平台的设计与实现具有一定的参考意义。