论文部分内容阅读
云计算在当今的信息领域应用的如火如荼,在高校中如何应用云计算,让云计算给高效的网络管理带来方便和好处呢?首先,我们了解一下什么是云计算。
云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。著云台给出的定义:“云计算是通过网络提供可伸缩的廉价的分布式计算能力”。
任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的,分别是Infrastructure(基础设施即服务)-as-a-Service,Platform(平台即服务)-as-a-Service,Software(软件)-as-a-Service。基础设施在最下端,平台在中间,软件在顶端。别的一些“软”的层可以在这些层上面添加。
在国内的一般高校里,很难有足够的资金和资源做IAAS(基础设施即服务),也没有必要去做IAAS,因为本身IAAS就是资本密集型和商业化的,对于高校这种非营利性机构没有太大意义。与之相对的,PAAS(平台即服务)就有了很多施展的空间。
对于普通高校,特别是高职类院校,对于云计算的需求无非分为两个方面:开发和运维。
开发人的梦 - 自在的运行环境,无限的资源。开发人希望专注于程序逻辑。有自由自在的运行环境,有丰富的外部资源如各种中间件。
运维人的梦 - 没有故障和重复的事,减少等待。运维天天处理故障,如果千千万应用都能以同样的方式部署,运维。那么故障的处理就简单多了,重复的事情也会变少。
具体到实际中,给大家简单介绍一个目前以及未来被业界普遍看好,并已经在国内很多公司(比如百度的平台即服务 (PaaS)产品百度App Engine,已经是基于Docker了)开始商用的PAAS引擎-----Docker
Docker是一种在Linux容器里运行应用的开源工具,一种轻量级的PAAS引擎。除了运行应用,Docker还提供了一些工具,借助Docker Index或自己托管的Docker注册表对进行了集装箱化处理的应用进行分发,从而简化复杂应用的部署过程。
部署的挑战
高校网络中心服务器应用的部署已经越来越复杂了。尤其是当今LINUX上面越来越多的应用使得应用在部署过程中耗费的时间精力越来越大。以前把几个Perl脚本拷贝到对应目录就完成服务器应用的安装这种时代已经一去不回了。特别是在LINUX下,软件相互依赖十分的严重,一般软件都有很多类型的需求:
对已安装软件和库的依赖
依赖于正在运行的服务
依赖于特定的操作系统
在服务器上部署、运行这样一个系统,我们可能会遇到下面的问题和挑战:
(1)隔离性(2)安全性(3)升级、降级稳定(4)快照、备份时间短(5)重复性复用性高(6)资源限制小(7)易于安装(8)易于移除
那我们应该如何解决这些问题呢?
让Docker来回答吧:
隔离性:Docker在文件系统和网络级别隔离了应用。从这个意义上来讲很像在运行”真正的“虚拟机。
重复性:用你喜欢的方式准备系统(登录并在所有软件里执行apt-get命令,或者使用Dockerfile),然后把修改提交到镜像中。你可以随意实例化若干个实例,或者把镜像传输到另一台机器,完全重现同样的设置。
安全性:Docker容器比普通的进程隔离更为安全。Docker团队已经确定了一些安全问题,正在着手解决。
资源约束:Docker现在能限制CPU的使用率和内存用量。目前还不能直接限制磁盘的使用情况。
易于安装:Docker有一个Docker Index,这个仓库存储了现成的Docker镜像,你用一条命令就可以完成实例化。
易于移除:不需要应用了?销毁容器就行。
升级、降级:和EC2 VM一样:先启动应用的新版本,然后把负载均衡器切换到新的端口。
快照、备份:Docker能提交镜像并给镜像打标签,和EC2上的快照不同,Docker是立即处理的。
怎么使用Docker?假设你已经安装了Docker。
安装虚拟机实例(以官方learn/tutorial镜像为例):
docker pull learn/tutorial
安装完成之后,看看效果
docker run learn/tutorial /bin/echo hello world
hello world
成功运行!
要在Ubuntu容器中运行bash,只要执行:
docker run -t -i ubuntu /bin/bash
根据“ubuntu”镜像的下载情况,Docker会选择下载或者使用本地可用的拷贝,然后在Ubuntu容器里运行/bin/bash。这时就会进入交互的环境
root@478234b73cba2:/#
通过获取实例容器ID命令获得容器ID
#docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
478234b73cba2 learn/tutorial:latest /bin/bash 3 minutes ago Exit 0 thirsty_pasteur
。命令也列出了容器基于的镜像、运行的命令、创建时间、当前状态,以及容器的端口和与主机端口之间的映射。 我们提交一下,再创建一个新的容器,这里我用SSH客户端登陆做例子:
$ docker commit 478234b73cba2 learn/tutorial
356e4d516681
$ docker run -d -p 22 -p 80:8080 learn/tutorial /usr/sbin/sshd -D
我用容器ID把容器提交到了仓库中。每个容器之间都互相不影响。运行docker images命令可以查看本地安装的所有镜像。
如果想要发布镜像docker push就可以了
下面举个简单的例子,说明DOCKER在实际应用中的强大功能
使用Dockerfile构建镜像
比如下面的文件用来运行、安装SSH服务器:
FROM learn/tutorial
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo "root:root" | chpasswd
EXPOSE 22
FROM定义基础镜像,RUN来配置镜像,在这里,我们更新了APT包仓库,安装了openssh-server,创建了一个目录,然后给我们的root账户设置了一个再简单不过的密码。EXPOSE命令会向外暴露22端口(SSH端口)
第一步是构建一个镜像。在包含Dockerfile的目录下运行:
$ docker bui ld -t zefhemel/ssh .
这会创建一个zefhemel/ssh仓库,包含我们新的SSH镜像。如果创建成功,就能进行实例化了:
$ docker run -d zefhemel/ssh /usr/sbin/sshd -D
和前面的命令不一样。-d表示会在后台运行容器,而不是运行bash,所以我们用前台模式(用-D参数指定)运行了sshd守护进程。
我们登陆一下
ssh root@localhost -p 49154
Are you sure you want to continue connecting (yes/no)? yes
成功!要发布新创建的镜像,只要运行docker push就可以了。
虽然本文描述的所有内容用原始的LXC、cgroups和AUFS也可能实现,但实现起来绝对没有那么容易或简单。可以想象,在未来运维和开发的领域,像DOCKER这种轻量级PAAS会大行其道~,在高校的运维和开发中,应用Docker应用云计算是一个很好的选择。
云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。著云台给出的定义:“云计算是通过网络提供可伸缩的廉价的分布式计算能力”。
任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的,分别是Infrastructure(基础设施即服务)-as-a-Service,Platform(平台即服务)-as-a-Service,Software(软件)-as-a-Service。基础设施在最下端,平台在中间,软件在顶端。别的一些“软”的层可以在这些层上面添加。
在国内的一般高校里,很难有足够的资金和资源做IAAS(基础设施即服务),也没有必要去做IAAS,因为本身IAAS就是资本密集型和商业化的,对于高校这种非营利性机构没有太大意义。与之相对的,PAAS(平台即服务)就有了很多施展的空间。
对于普通高校,特别是高职类院校,对于云计算的需求无非分为两个方面:开发和运维。
开发人的梦 - 自在的运行环境,无限的资源。开发人希望专注于程序逻辑。有自由自在的运行环境,有丰富的外部资源如各种中间件。
运维人的梦 - 没有故障和重复的事,减少等待。运维天天处理故障,如果千千万应用都能以同样的方式部署,运维。那么故障的处理就简单多了,重复的事情也会变少。
具体到实际中,给大家简单介绍一个目前以及未来被业界普遍看好,并已经在国内很多公司(比如百度的平台即服务 (PaaS)产品百度App Engine,已经是基于Docker了)开始商用的PAAS引擎-----Docker
Docker是一种在Linux容器里运行应用的开源工具,一种轻量级的PAAS引擎。除了运行应用,Docker还提供了一些工具,借助Docker Index或自己托管的Docker注册表对进行了集装箱化处理的应用进行分发,从而简化复杂应用的部署过程。
部署的挑战
高校网络中心服务器应用的部署已经越来越复杂了。尤其是当今LINUX上面越来越多的应用使得应用在部署过程中耗费的时间精力越来越大。以前把几个Perl脚本拷贝到对应目录就完成服务器应用的安装这种时代已经一去不回了。特别是在LINUX下,软件相互依赖十分的严重,一般软件都有很多类型的需求:
对已安装软件和库的依赖
依赖于正在运行的服务
依赖于特定的操作系统
在服务器上部署、运行这样一个系统,我们可能会遇到下面的问题和挑战:
(1)隔离性(2)安全性(3)升级、降级稳定(4)快照、备份时间短(5)重复性复用性高(6)资源限制小(7)易于安装(8)易于移除
那我们应该如何解决这些问题呢?
让Docker来回答吧:
隔离性:Docker在文件系统和网络级别隔离了应用。从这个意义上来讲很像在运行”真正的“虚拟机。
重复性:用你喜欢的方式准备系统(登录并在所有软件里执行apt-get命令,或者使用Dockerfile),然后把修改提交到镜像中。你可以随意实例化若干个实例,或者把镜像传输到另一台机器,完全重现同样的设置。
安全性:Docker容器比普通的进程隔离更为安全。Docker团队已经确定了一些安全问题,正在着手解决。
资源约束:Docker现在能限制CPU的使用率和内存用量。目前还不能直接限制磁盘的使用情况。
易于安装:Docker有一个Docker Index,这个仓库存储了现成的Docker镜像,你用一条命令就可以完成实例化。
易于移除:不需要应用了?销毁容器就行。
升级、降级:和EC2 VM一样:先启动应用的新版本,然后把负载均衡器切换到新的端口。
快照、备份:Docker能提交镜像并给镜像打标签,和EC2上的快照不同,Docker是立即处理的。
怎么使用Docker?假设你已经安装了Docker。
安装虚拟机实例(以官方learn/tutorial镜像为例):
docker pull learn/tutorial
安装完成之后,看看效果
docker run learn/tutorial /bin/echo hello world
hello world
成功运行!
要在Ubuntu容器中运行bash,只要执行:
docker run -t -i ubuntu /bin/bash
根据“ubuntu”镜像的下载情况,Docker会选择下载或者使用本地可用的拷贝,然后在Ubuntu容器里运行/bin/bash。这时就会进入交互的环境
root@478234b73cba2:/#
通过获取实例容器ID命令获得容器ID
#docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
478234b73cba2 learn/tutorial:latest /bin/bash 3 minutes ago Exit 0 thirsty_pasteur
。命令也列出了容器基于的镜像、运行的命令、创建时间、当前状态,以及容器的端口和与主机端口之间的映射。 我们提交一下,再创建一个新的容器,这里我用SSH客户端登陆做例子:
$ docker commit 478234b73cba2 learn/tutorial
356e4d516681
$ docker run -d -p 22 -p 80:8080 learn/tutorial /usr/sbin/sshd -D
我用容器ID把容器提交到了仓库中。每个容器之间都互相不影响。运行docker images命令可以查看本地安装的所有镜像。
如果想要发布镜像docker push就可以了
下面举个简单的例子,说明DOCKER在实际应用中的强大功能
使用Dockerfile构建镜像
比如下面的文件用来运行、安装SSH服务器:
FROM learn/tutorial
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo "root:root" | chpasswd
EXPOSE 22
FROM定义基础镜像,RUN来配置镜像,在这里,我们更新了APT包仓库,安装了openssh-server,创建了一个目录,然后给我们的root账户设置了一个再简单不过的密码。EXPOSE命令会向外暴露22端口(SSH端口)
第一步是构建一个镜像。在包含Dockerfile的目录下运行:
$ docker bui ld -t zefhemel/ssh .
这会创建一个zefhemel/ssh仓库,包含我们新的SSH镜像。如果创建成功,就能进行实例化了:
$ docker run -d zefhemel/ssh /usr/sbin/sshd -D
和前面的命令不一样。-d表示会在后台运行容器,而不是运行bash,所以我们用前台模式(用-D参数指定)运行了sshd守护进程。
我们登陆一下
ssh root@localhost -p 49154
Are you sure you want to continue connecting (yes/no)? yes
成功!要发布新创建的镜像,只要运行docker push就可以了。
虽然本文描述的所有内容用原始的LXC、cgroups和AUFS也可能实现,但实现起来绝对没有那么容易或简单。可以想象,在未来运维和开发的领域,像DOCKER这种轻量级PAAS会大行其道~,在高校的运维和开发中,应用Docker应用云计算是一个很好的选择。