容器和镜像--云计算不可不知的概念

        云计算解决了计算机基础设施中计算、网络、存储这几个方面的弹性问题,但是它遗留了两个问题,即应用的扩展性和迁移性。在云计算环境下,人们想出了两种解决方法:一是通过自动化脚本,然而不同环境下运行效果不一样,一个脚本可能在一个环境下运行正常,但在另一个环境下运行就不正常了;二是通过虚拟机镜像,然而虚拟机镜像太大了,复制和下载都太费时间。
        为了解决上述问题,有人提出了容器技术。通过借鉴传统运输业的解决方案,有人提出可以使用类似集装箱的方式封装应用和应用运行的环境(应用运行所需要的依赖关系),也就是将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器。通过一种类虚拟化技术来隔离运行在主机上的不同进程,从而使容器之间、容器和宿主操作系统之间相互隔离、互不影响,使应用可以在任何地方以相同的方式运行。开发人员在计算机上创建并测试好的容器,无需做任何修改就能够在生产系统的虚拟机、物理服务器或者公有云主机上运行。

容器和虚拟机

        谈到容器,就不得不将它与虚拟机进行对比,因为两者都是为应用提供封装和隔离的。 传统的虚拟化技术,例如VMware、KVM、Xen,目标都是创建完整的虚拟机。为了应用 能够运行,除了部署应用本身及其依赖外,还要安装整个操作系统。 容器由两部分组成:

  • 应用本身;
  • 应用依赖的IT资源,如应用需要的库或其他应用程序。

        容器在主机操作系统的用户空间中运行,与操作系统的其他进程隔离,这一点显著区别于虚拟机。 图7-1所示为容器与虚拟机的区别。

         图7-1中,由于所有的容器共享一个主机操作系统,这使得容器在体积上要比虚拟机小很多。另外,启动容器不需要启动整个操作系统,所以容器部署和启动速度更快、开销更小,也更容易迁移。

容器和镜像 

        给计算机安装过系统的人都知道,装系统之前我们需要下载系统镜像。镜像相当于运行在计算机中的操作系统系统。容器镜像,就相当于容器中运行的一套系统,常用的数据库、中间件、软件等在镜像中可能都有。安装镜像后不足的软件可以继续安装,将构成一个新的镜像系统。

        我们以最常用的容器Docker为例,Docker支持扩展现有镜像来构建新的镜像。例如我们需要构建一个新的镜像,其Dockerfile 如图7-5所示。

 新镜像不需要从scratch开始,而是直接在Debian base镜像上构建,接着安装emacs和 apache2,最后设置容器启动时运行base镜像。新镜像的构建过程如图7-6所示。

         从图7-6中可以看到,新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。Docker采用这种分层结构最大的好处是可以共享资源。 可能有人要问了,如果多个容器共享一个base镜像,当某个容器修改了base镜像的内容, 这时其他容器的内容是否会被修改呢?答案是否定的,修改会被限制在单个容器内。这被称为 容器的COW特性。当容器启动时,一个新的可写层被添加到镜像的顶部,这一层被称作容器层,容器层之下的都叫作镜像层。所有对容器的改动,无论添加、删除,还是修改文件都只会发生在容器层中,只有容器层是可写的,容器层下面的所有镜像层都是只读的。可见容器层保 存的是镜像变化的部分,不会对镜像本身做任何修改。        

猜你喜欢

转载自blog.csdn.net/qq_36564503/article/details/130440312