APP下载

基于Docker的HTTP服务器在实验室的应用

2019-06-11李慧春

实验室研究与探索 2019年5期
关键词:文件夹局域网镜像

李慧春

(吉林大学 公共计算机教学与研究中心,长春 130021)

0 引 言

高校实验室是进行实验教学、科学研究、人才培养的重要基地。如何高质量高效率地管理实验室,创新实验室管理方法,是实验技术人员必须认真研究与探索的问题[1-3]。本文在实验室内利用Docker技术快速搭建起来一个HTTP服务器,同一局域网内其他计算机通过浏览器访问这台服务器,可以下载各种格式的文件。这种浏览器与服务器(B/S)的架构模式,既有利于实验员在各台学生机上安装教学软件,也有利于教师随时随地分享教学课件给学生。相比于传统的U盘拷贝方式,具有节省时间,防止U盘病毒传播的优点。

1 研究背景

1.1 局域网内文件共享方法

局域网内传输文件是一种普遍性的需求,目前应用比较广的解决方案有以下几种[4-6]:

(1)操作系统自带的文件共享方式。把文件或驱动器设置为网络共享的,同一局域网内的其他电脑可以通过访问共享文件夹下载文件。这种方法虽然不需要额外安装软件,但是由于操作系统版本、组策略设置、Windows防火墙等问题,用户使用并不是很方便。

(2)专用的文件传输软件。专业软件如飞鸽传书、飞秋、Dukto等都做得很优秀。这些软件由于是局域网内进行文件传输的专业工具,所以具有操作简单,传输速度快的优点。缺点是传输双方需要安装同一个软件。

(3)FTP/WEB服务器模式。用户通过FTP客户端或浏览器访问服务器可以下载所需要的资源。目前应用比较多的有HFS(HTTP File Server)工具等。这种模式使用起来很方便,接收方只需要安装浏览器就可以了。本文方法属于此模式。

(4)其他工具,如QQ,BitTorrent,百度云网盘等。这类工具带有局域网传输文件的功能但并非仅限于局域网传输,大部分需要外网支持。它们功能强大,但针对性不强。

1.2 Docker技术简介

Docker是基于go语言实现的开源的容器引擎,诞生于2013年[7]。Docker容器是在操作系统层面上实现虚拟化,直接使用本地主机的操作系统。传统虚拟化方式下每个虚拟机都会有虚拟的GuestOS,需要额外的操作系统开销。相比起来,Docker容器更加轻量级。Docker具备的诸多优点使其发展前景被业内普遍看好。现在主流的Linux操作系统都已经支持Docker。在最近Linux基金会的调查中,Docker是仅次于OpenStack的最受欢迎的云计算开源项目[8]。

Docker的大部分操作都围绕着它的3大核心概念——镜像、容器和仓库而展开。Docker镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序,或用户需要的其他软件。容器是从镜像创建的运行实例。可以把Docker容器看作是一个简易版的Linux系统环境(包括root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。目前最大的公开仓库是官方提供的Docker Hub,其中存放了数量庞大的镜像供用户下载[9]。

Docker在主流的操作系统和云平台上都可以使用,包括Linux操作系统(如Ubuntu、Debian、CentOS、Redhat等)、MacOS操作系统和Windows操作系统,以及AWS等云平台。目前Linux操作系统对Docker的支持是原生的,使用体验最好。对于Windows操作系统来说,目前只有Win10专业版和企业版用户可以使用官方的Docker for Windows应用来安装Docker,其他版本需要通过虚拟机方式安装[10-11]。

1.3 HTTP协议原理

超文本传输协议(HyperText Transfer Protocol,HTTP)是用于从www服务器传输超文本到本地浏览器的传送协议[12]。

HTTP url的格式如下

http://host[:port][abs_path]

其中,http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者ip地址;port指定一个端口号,为空则使用默认端口80;abs_path指定请求资源在服务器上的位置。

客户端发送一个url到服务器后,服务器会给予相应的响应信息。客户端接收服务器所返回的信息,通过浏览器显示在用户的显示屏上。

如果在以上过程中的某一步出现错误,那么产生的错误信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

2 基于Docker的HTTP服务器建设方案

2.1 Docker安装

由于实验室的计算机操作系统多为Windows,本文在实验室中选择作为HTTP服务器的计算机系统为Win10家庭版,因此需要通过在Docker官网下载Docker Toolbox来安装Docker[13]。安装过程结束后,Docker Toolbox自动在物理主机上安装了VirtualBox软件,该软件内运行了Linux虚拟机,也可以称为Docker主机或Docker虚拟机。在Docker虚拟机中可以创建Linux系统,称为容器。桌面上多出Docker Quickstart Terminal、Oracle VM VirtualBox和Kitematic 3个应用图标。其中Docker Quickstart Terminal可以启动Docker虚拟机。打开Oracle VM VirtualBox应用图标,会看到Docker默认创建的虚拟机default。

2.2 Docker虚拟机下挂载本地目录

主机上的任意文件夹都可以挂载到Docker虚拟机下。为了避免出现不必要的麻烦,文件夹和里面存放的文件名称最好不要出现中文。不失一般性,在主机的E盘建立一个文件夹,命名为FolderWin,在该文件夹下加入hello.txt和singer.rar文件。现在把FolderWin目录挂载到Docker的虚拟机下。进入default虚拟机的设置页面,添加共享文件夹,并且把共享文件夹在虚拟机中也命名为“FolderWin”,操作如图1所示。

然后在default虚拟机上点击右键,选择“显示”,进入虚拟机,输入以下命令:

cd /mnt

mkdir FolderVM

mount -t vboxsf FolderWin /mnt/FolderVM

图1 主机与虚拟机共享文件夹设置

这段命令表示:首先进入虚拟机根目录下的mnt文件夹,新建FolderVM文件目录。将物理机上FolderWin目录挂载到虚拟机上,文件系统类型为vboxsf。挂载后查看FolderVM的子目录。如图2所示,可以看到主机E:FolderWin文件夹下的文件已经可以显示出来了。此时在主机的FolderWin文件夹下再加入其它文件,在default虚拟机的/mnt/FolderVM目录下运行“ls”命令也是可以看到的。这样就达到了教师随时随地在FolderWin目录下放入文件供学生下载的目的。

图2 主机文件夹挂载到Docker虚拟机

2.3 创建Dockerfile,运行http-server

Dockerfile是构建镜像的基本方式,它通过一系列的指令来告诉Docker怎样创建和配置容器[14]。本文使用http-server程序来建立服务器。http-server是一个简单的、无需任何配置的命令行服务器,用户可以通过HTTP协议查看服务器所指定工作目录下的文件[15]。

(1)进入default虚拟机,创建一个目录,假定命名为myHTTPServer。在该目录下,用touch命令创建一个文件,命名为Dockerfile,没有扩展名。需要注意的是default虚拟机默认的工作目录是/root,它仅仅挂载在内存中,关闭系统后数据会丢失。所以最好切换到其他目录下再创建myHTTPServer目录。

(2)打开Dockerfile,在该文件中输入如下内容:

FROM ubuntu:latest

MAINTAINER abcdeabcde@example.com

RUN apt-get update

RUN apt-get install -y nodejs

RUN apt-get install -y npm

RUN npm install -g http-server

WORKDIR /usr/apps/myProjects/

CMD [“http-server”,“-s”]

这几句命令的意思是:以ubuntu:latest为基础镜像新建一个镜像。接下来是创建者的姓名和邮箱,也可以不写。然后更新apt-get工具,并使用它来安装nodejs和npm。这里使用npm工具来安装http-server。工作目录设置为/usr/apps/myProjects/。最后使用http-server命令来运行http-server。Dockerfile文件写好后保存退出即可。

(3)在myHTTPServer目录下执行如下命令:

docker build -t “spring:http-server” .

这个命令使用当前目录下的Dockerfile文件创建了一个spring:http-server的镜像,其中spring是本文示例仓库的名字,可以任意指定,http-server是镜像的标签。

(4)在Docker终端的命令行工具下,执行如下命令:

docker run -d -v /mnt/FolderVM:/usr/apps/myProjects/-p 8080:8080 “spring:http-server”

这段命令表示:启动spring:http-server程序,创建容器。通过“-d”参数,把启动的程序设置到后台运行。通过参数“-v”,把虚拟机的/mnt/FolderVM目录挂载到容器的/usr/apps/myProjects/目录,实现二者之间的数据交换。由于前面已经把主机的E:FolderWin与/mnt/FolderVM 做了对应,所以这里间接实现了主机文件夹和容器工作目录的对应。最后实现了容器的8080端口与虚拟机的8080端口的映射。命令中的前一个8080是虚拟机的端口号,后一个8080是容器的端口号。容器的端口号必须是8080,因为它是http-server对外提供服务的指定端口。

(5)为确认程序spring:http-server是否运行,可以通过执行命令“docker ps”进行查看。

2.4 设置端口转发

由于Docker的底层使用了Linux容器技术(LXC),其实它只能运行在Linux上,而在Windows系统下要运行Docker,实际上是在虚拟机下运行的。在2.3小节中实现了容器的8080端口与虚拟机的8080端口之间的映射,还需要在VirtualBox的设置中,为NAT网络模式增加端口转发规则,把虚拟机的8080端口与主机的8080端口进行映射,如图3所示。

图3 端口转发设置

查看作为服务器的物理主机的ip,学生机在浏览器输入网址http://ip:8080,就可以访问服务器文件夹FolderWin并下载所需资料了(实验所用服务器的ip为192.168.31.14)。

3 性能测试

为了验证本文方法的性能,在实验室机房进行了文件分发性能测试。测试机房安装有40台学生机,1台教师机。学生机与教师机的配置均为:cpu型号i5-6500,4GB内存,1TB硬盘,Win10家庭版64位操作系统。所有计算机连接在2台24口H3C千兆交换机上,型号为S1224R。所有交换机连接在1台H3C路由器上,型号为S5120。

把教师机配置为本文方法的服务器。在学生机上使用IE浏览器访问服务器下载文件。为了测试多点同时下载时服务器的抗压性能,测试文件选用2.40GB的大文件。学生机下载前打开IE浏览器自带的抓包工具,下载完成后,记录下载文件所用的时间。统计结果如表1所示。

由表1可以看出,从教师机下载文件时的速度会随着学生机结点数的增多而变慢。这与局域网中计算机的网卡速率,网络环境有关系。另外,服务器在多点下载时能够稳定运行,没有出现崩溃现象。

表1 不同学生机结点下载文件花费时间表

4 结 语

本文研究并实现了一种基于Docker的实验室文件共享方法。我校由于Docker的引入,只需要简单的几步操作就可以快速搭建起来一个HTTP服务器,为实验室内其他学生机提供所需的下载文件。虽然现在能够实现局域网内文件共享的方法很多,但是本文另辟蹊径,具有一定的参考意义。未来将继续研究实验室管理的新方法。

猜你喜欢

文件夹局域网镜像
镜像
轨道交通车-地通信无线局域网技术应用
Fast Folders,让你的文件夹四通八达
基于VPN的机房局域网远程控制系统
镜像
基于802.1Q协议的虚拟局域网技术研究与实现
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
局域网性能的优化
不容忽视的空文件夹