基于Docker技术的高校在线编程平台设计与实现
2022-09-20林志煌张菽妍赵莲芬
林志煌,张菽妍,赵莲芬
(广州软件学院网络技术系,广州 510990)
0 引言
21世纪人类面临的最大机遇是计算机语言,计算机语言将成为科技创新的核心动力,因此就需要结合新教改的要求创新教学模式,加强高校学生的编程实践能力,提高学生编程兴趣。在如今的计算机课程实验教学中,大部分老师都是使用PaaS平台进行教学,虽然PaaS平台提供了比较完善的开发环境,但由于PaaS的很多基础构建都是基于虚拟机运行的,导致计算机资源大量消耗,出现资源利用率低下等问题。同时高校学生在开发应用、编程等课程中需要更为稳定的开发环境来进行相关实验。对于初学者而言,需要在电脑本地部署好计算机语言需要的编译环境,安装相关的开发工具,安装开发插件等。在这个过程中,由于电脑硬件环境不同以及安装过程的某些特殊原因导致的安装失败等问题频繁发生,难以找到合适的解决方式,严重地打击了编程初学者的学习热情,高校内的学生更有可能因为配置环境问题无法在非上课时间进行课程实践。本平台通过docker容器技术结合浏览器远程访问服务器内统一配置好的容器,无需考虑硬件环境及电脑配置,可以做到所有学生统一环境进行实验,这将有效提升学生的编程课程效率及稳定性。
1 开源容器引擎Docker
1.1 Docker概述
Docker是Docker.Lnc公司开源的一个基于LXC技术搭建的Container容器引擎,该引擎的源代码托管在Github上。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace以 及OverlayFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。传统虚拟机携带有操作系统,很小的应用程序却因为携带了操作系统而变得十分笨重,而docker容器内的应用程序是直接调用宿主机的cpu、磁盘等,容器没有自己的内核,也没有虚拟硬件,因此比较轻便。每个容器间是相互隔离的,每个容器内部都有一个属于自己的文件系统,通过隔离机制可以将服务器利用到极致。由于Docker底层使用LXC来实现,LXC将linux进程沙盒化,使得进程之间彼此隔离,并且能够控制各进程的资源分配。
Docker中包含三个基本的概念:镜像(image)、容器(container)和仓库(repository)。镜像通常是一个只读文件,它的功能是用于创建容器,且创建出来的容器与镜像文件完全相同,唯一的区别在于容器是可读写的。只有容器才能用于运行程序,每一个容器之间是相互隔离的,可以理解为一台轻量化的虚拟机。在此基础上,容器也可以反过来用于构建镜像。仓库即集中存放镜像文件的场所。
1.2 Docker与传统虚拟化技术的不同
传统虚拟机是虚拟出一套硬件,运行一个完整的操作系统,其本质是一台物理机上模拟出多台虚拟服务器,可以在这个虚拟服务器上安装与运行软件,因而其占用的硬件资源较多,启动较慢。而Docker容器不封装整个操作系统,基于主机内核通过Docker守护程序主机进程执行,是内核级别的虚拟化,可以在一个物理机上运行多个容器实例。具有轻量化、启动快、占用资源少等特点。
当容器需要回滚时,新容器替代容器的整个过程秒级完成,而传统虚拟化技术由于依赖项可能不同,更有可能产生冲突,因此传统虚拟化技术做回滚时比较困难。
2 基于Docker的在线编程平台的设计
本编程平台基于混合云环境,发挥了公有云和私有云两类云平台的优势,扩展了本编程平台的技术基础,提高平台的可用性与便捷性,降低了信息化投入成本的同时保障了数据的安全性。利用Docker容器技术和Web技术,将传统的实验室机房环境转移至云环境中,学生通过浏览器就能使用云主机进行课程的实验。在实验过程中,学生不仅可以根据教师上传的实验指导书和建立的云实验环境进行实验,而且可以编辑实验笔记,保存或上传实验结果。该平台还提供实验社区、综合协作实验、实验资源和系统资源的监控管理等。
2.1 角色设计
本编程平台服务者主要由学生和教师组成。学生在本平台上通过用户鉴权登录后,查看实验列表,选择自己所要学习的课程,连接远程主机就可以开始学习,并且同时可以查看实验文档,实验完成后,通过实验完成检查退出、断开远程主机,上传或下载文件,即可完成本次实验。教师通过用户鉴权登录后,可以进行实验文档编辑,选择本次实验所需要的环境,便可以发布实验,同时可以管理实验,对实验再次编辑。管理员主要管理用户、实验内容、服务器主机、环境镜像等。角色设计如图1所示。
图1 角色设计
2.2 性能设计
该平台在面对大量实验参与者连接远程主机的情况下,每一个参与者平均需要近300 MB的主机内存及根据参与者主机运行程序决定的cpu消耗。为了防止容器中的性能占用过高,在创建容器时需要提前设置相关参数限制容器性能消耗,在出现过高消耗时docker会杀死当前容器。同时在每一次创建容器时对当前剩余内存及cpu进行查询,若不满足新容器的创建就将连接放入队列中,等待其他容器销毁后再进行连接。若大量实验参与者同时进入导致部分容器创建失败则会触发事务回滚,避免了数据库数据与服务器中实际状况不同步。
使用Docker容器化技术搭建分布式服务器集群为用户提供稳定、可靠的在线虚拟操作环境。在云服务器中搭建各个实验环境的Docker镜像,在镜像中配置noVNC实现浏览器访问。在云服务器中基于镜像生成容器,各个容器的端口地址使用动态分配算法。容器具有隔离性,某个用户的容器发生问题不会影响其他用户的容器,也不会对服务器集群产生问题,具备较高的安全性。
3 基于Docker的在线编程平台的实现
3.1 实验环境
本平台在Windows10环境中使用visual studio code(简称VS code)的源代码编辑器进行前后端开发。使用Navicat进行可视化的数据库管理,使用postman接口测试工具进行后端接口测试。使用Google Chrome浏览器进行前端页面开发调试。通过apidoc生成后端的接口文档。
3.2 用户端功能
用户端主要功能有:用户通过鉴权登录编程平台,查看实验列表、连接远程主机、断开主机连接、上传下载文件、实验完成检查、刷新实验主机、查看实验文档。
3.2.1 用户鉴权功能实现
用户鉴权模块用于用户登陆功能,用户在登陆时需要输入手机号码,点击发送验证码按钮,前端将用户请求发送至后端,后端发送调用腾讯云接口,将验证码短信发送至用户手机中。用户获取验证码后,需要输入验证码,并点击登陆按钮。
3.2.2 用户连接远程主机功能实现
当用户请求连接主机时,远程主机先查询实现环境的镜像id,再根据镜像信息生成容器并运行,并根据端口分配算法为容器映射一个端口,将端口与服务器域名拼接生成一个完整地址后返回给用户,用户即可在浏览器中进入服务器的编程环境。连接过程架构图如图2所示,流程图如图3所示,连接成功后的页面如图4所示。
图2 用户连接远程主机过程图
图3 用户连接主机流程图
图4 用户连接主机成功后的初始页面
3.3 教师端功能
教师通过鉴权登录到教师端,可查看实验列表、连接远程主机、断开主机连接、上传下载文件、实验发布、实验管理、实验文档查看、刷新实验主机、查看实验文档。
3.3.1 实验发布功能的实现
实验的发布需要教师填写发布表单,表单中包含有实验的标题、简介、实验环境等内容。在用户正确填写表单并点击发布后,后端将表单数据插入数据库并为用户生成一台根据用户表单中信息所选择的实验环境的容器,教师在实验管理页面可以查看到自己发布后暂未编辑章节的实验。
教师点击完善实验章节按钮向后端发送请求,后端响应后将测试环境的网址返回至前端,前端收到网址后将数据渲染至页面,教师进入测试实验环境中,即可以开始实验并编辑章节,编辑章节完成后用户点击编辑完成按钮,将章节数据发送至后端,后端将章节数据插入章节表中,实验发布完成。
图5 编辑实验文档页面
3.3.2 实验文档上传下载功能的实现
实验文档上传功能是前端通过http库axios中的post方法向后端发送文件数据,后端接收到数据后存储于指定主机随机码位置的静态文件夹,上传后可以通过远程主机的目录直接查看。文件上传成功后会在数据库文件表中插入一条新数据用于存储文件名及文件的外部访问路径。文件的下载功能通过浏览器直接访问文件的外部访问路径来实现。实验上传下载功能实现界面如图6所示。
图6 上传下载功能
3.4 管理员端功能
管理员可进行连接管理、主机管理、实验管理、环境管理、新建实验环境、用户管理。后台界面如图7所示。
图7 后台界面
4 结语
该编程平台基于混合云环境,利用Docker容器技术结合Web技术构建基于浏览器的多用户同时在线且彼此间互不干扰的在线实现平台。相对于传统的编程平台,在线虚拟编程平台不仅能够打破时间和地点的限制,让学生能有更多的机会来接触和研究所做的实验,而且还能培养他们以理论联系实际的思维方式以及自主创新的能力。在线编程平台可以同时提供实验和资源的共享,这种共享可以基于校内或者校外,提供随时随地在线学习和实践资源。基于Docker容器技术的在线编程平台具备灵活性和共享性等优势,能够极大地节约资源,提高学习者的学习兴趣以及综合实践能力,具有广阔的应用前景。