容器技术

Posted dy2903

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器技术相关的知识,希望对你有一定的参考价值。

Technorati 标签:

什么是容器

在一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的网站应用,我们当然希望网站的资源相互隔离,这样一个应用崩溃了,也不会影响其他的应用的运行。

要实现资源的隔离,最容易想到的当然是开若干虚拟机,在其上安操作系统,然后搭建应用。然而一台主机上,一般就能开10~15个虚拟机,如果在这台机器上开 500 个虚拟机,这台服务器估计早就不堪重负了。

有没有资源隔离能力不错,而且虚拟化开销还要小的方式,虚拟机实在太重了。

我们来看一下问题的症结,虚拟机在硬件平台上运行一层软件,抽象出CPU、内存等资源,然后可以在其上运行不同的操作系统、软件等。这种全虚拟化的形式,还有操作系统,当然很

于是我们引入了容器,它只是把应用和运行时所需要的依赖打包为镜像,所以我们只需要开一个进程就可以运行这个镜像。

现在容器只是创建一个容器进程无需启动操作系统,这个过程只需要秒级的时间。而且因为可以轻量,可以在非常轻松的让让几十个服务在服务器中跑起来。

f189b80b-745b-4e9a-921d-0cee07577f91

下图是虚拟机与容器的对比图,容器直接运行在Linux操作系统上,共享操作系统、依赖库等。
556ef9cb-238a-4630-a1d1-22f8e10a63f5

而且容器是直接在CPU本地运行指令,而不需要通过硬件辅助虚拟化等,所以效率会更高,启动会更快,更轻量。

可以将容器理解为沙盒,每个容器运行一个应用,而且相互隔离,但是容器之间也可以相互通信。优点是:

  • 将应用以及运行的环境打包成镜像,所以部署更快。
  • 资源利用率高:因为不需要Hypervisor层支持,所以性能更好。
  • 便于迁移:可以在任意平台上运行。

容器属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。

容器带来的额外的东西

在文章微服务里面我们讲过,所谓微服务,就是将单个功能模块做为一套小型服务进行开发,可以通过自动化部署独立部署,而且实现资源的有效隔离。

现有的容器技术为微服务提供了很好的实现形式,微服务实例运行在容器上运行,实现了服务器资源的有效隔离。

而且用户的应用环境非常多,很可能出现开发环境与用户实际环境版本不同,或者说依赖不同,这样应用在运行的时候会出现各种问题。所以容器可以将应用所有的依赖环境进行打包,保证开发和生产的环境一致。做到“一次封装,到处运行”,这又和DevOps结合起来了。

当然与微服务一样,容器也有很多的缺点,比如复杂性增加了,需要Linux的支持等。

参考

容器技术概览

以上是关于容器技术的主要内容,如果未能解决你的问题,请参考以下文章

尝试将片段添加到我的片段容器 FrameLayout

尝试将片段添加到我的片段容器 FrameLayout

使用 BottomBar 和片段容器禁用 Android 片段重新加载

Android:使用 putExtra 从片段访问容器活动对象?

如何使用滚动片段容器实现通用布局?

片段 - 替换容器,如果 id 不是唯一的