容器技术概述

容器 (Container) 是一种在资源隔离状态下,允许我们运行应用程序及其依赖项,操作系统层面的轻量级、虚拟化技术。在容器中,应用程序运行所依赖的必要组件都需要被打包为可被反复调用的单个镜像,镜像工作时运行在孤立的环境中,不共享 主机操作系统内存CPU磁盘 ,这保证了容器内的进程不能访问容器外的任何进程。

虚拟化

虚拟机和容器的区别

虚拟机 (Virtual Machine) 通常包括整个操作系统和其应用程序,并且需要一个虚拟机管理程序来控制 VM (虚拟机)。

因为囊括了整个操作系统,虚拟机的大小会达到几千兆字节 (1千兆字节 = 1GB),这样做的缺点之一是计算机会耗费几分钟去启动操作系统和初始化应用程序。另一方面,容器则是轻量级的且几乎只有几兆字节 (1兆字节 = 1MB),容器相较于虚拟机有性能强和立即启动的优势。

virtual-machines-vs-containers.jpg

容器解决了什么问题?

应用程序在计算环境改变后会出现很多问题。问题可能会出现在开发环境变为测试环境之后,进一步执行程序的过程中,比如,一名开发者在 Windows 环境下编写了一个程序,但上层环境 ( test (测试)、 stage (准上线)或 prod (生产))却部署了在 Linux 上。在这种情况下,当操作系统发生变化后,应用程序部分功能会停止工作。所以,通常情况下,当配套软件不一致时,间歇性故障几率会更高。

正如 Docker 之父 Solomon Hykes 所言:"您在 Python 2.7 进行测试而使用 Python 3 进行生产;或者说您安装了与程序依赖不同版本的 SSL 库;再比如你在 Debian 测试却在 RedHat 下生产,在这些情况下,会出现很多古怪的错误。"

不止计算环境,网络环境也会发生改变。 Hykes 补充道:“网络拓扑结构,安全策略和存储都可能存在不同,但软件却不得不在上面运行。”

容器的优点

敏捷环境: 容器技术最明显的优势是它比 VM (虚拟机)实例运行速度更快,容器轻量级的特点让它在性能和占用内存上开销更小。

提高生产力: 容器通过消除跨服务的依赖和冲突的方式提高开发人员的生产力。每个容器被看作一个微服务,因此可以在不需要考虑同步的条件下,彼此独立升级。

版本控制: 每一个容器镜像内含版本控制,因此能回溯到不同版本,注意版本之间的差别等。

可移植性高: 容器封装了针对应用程序的所有重要细节,比如程序依赖和操作系统,这帮助增强了容器镜像的可移植性,比如,相同镜像能被用来在 Windows / Linux 或者 dev (开发) / test (测试) / stage (准上线) 环境中。

标准化: 绝大多数容器基于开放标准,能在主流的 Linux 发行版, Microsoft 等操作系统中运行

安全: 容器分别在进程和架构上彼此独立,因此单个容器的升级和调整不会影响别的容器。

容器的缺点

复杂性增加n 个容器同时运行应用程序时,复杂性因此增加,在生产环境中,管理这些容器是一个极具挑战的任务。 可以利用 Kubernetes 或者 Mesos 工具来管理 n 个容器。

本机需要 Linux 支持:绝大多数容器技术,比如 Docker, 基于 Linux 容器 (LXC), 与在 Linux 上运行这些实例相比,在 Microsoft 环境下运行这些容器会显得麻烦,它们的日常使用会带来复杂的问题。

不成熟:容器技术在市场中相对较新,因此进入市场的时间缓慢。可用资源的数量在开发人员中是有限的,如果遇到一些问题,可能需要一些时间才能找出解决方案。

容器的分类

操作系统容器 (OS Container) :根据维基百科,“操作系统级虚拟化是一种计算机虚拟化方法,其中操作系统的内核允许存在多个孤立的用户空间实例,而不仅仅是一个,这种实例有时被称为容器,虚拟化引擎(VEs)或监狱(jails)(FreeBSD jailchroot jail),从运行的程序角度来看,它们可能看起来就像真正的计算机。

如上所述,它们共享主机操作系统的内核,但提供用户空间隔离。不同的应用程序可以被安装,配置,并且可以像我们在主机操作系统上运行应用程序一样运行。同样,分配给容器的资源只对该容器可见。任何其他来宾操作系统映像将无法访问另一来宾操作系统的资源。

当需要配置一组具有相同配置的操作系统时,容器非常有效。因此,容器有助于创建与另一个操作系统具有类似风格的模板。

要创建操作系统容器,我们可以利用容器技术,如 LXCOpenVZLinux VServerBSD JailsSolaris zones

os-vs-app-containers.jpg

应用容器(Application Container:根据维基百科,“应用程序虚拟化是一种软件技术,它将计算机程序从其执行的底层操作系统中进行封装。完全虚拟化的应用程序并不是按照传统的意义来安装的,尽管它仍然像以前一样被执行。应用程序在运行时表现得像直接与原始操作系统及其管理的所有资源进行交互,但可以在不同程度上进行隔离或沙箱化。

在这种情况下,“虚拟化” (Virtualization) 是指被封装的工件(应用程序),它与硬件虚拟化中的含义完全不同,硬件虚拟化指的是物件被抽象(物理硬件)。

应用程序容器被设计为打包和运行单个进程,而在操作系统容器中,可以运行多个服务和进程。

DockerRocket 这样的容器就是应用程序容器的典型例子。

本文的版权归 仁梓 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏赵康的专栏

容器技术概述

容器是一种轻量级的、操作系统级别的虚拟化技术,它允许我们在资源隔离的进程中运行应用程序及其依赖项。运行应用程序所需的所有必要组件都可以打包为单个可以复用的映像。...

2226

构建远程缓存系统

上个月,我们的工程团队发布了一个大的更新,关于在使用我们的Docker平台Jet时Docker镜像是如何被缓存和存储的。在本文中,我们将讨论更新的动机,特性的设...

2236
来自专栏磐创AI技术团队的专栏

5分钟配置好你的AI开发环境

无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库、软件包或者框架总是一个困难又繁琐的过程。但是像Doc...

1416
来自专栏marsggbo

OpenShift的容器映像(第3部分):使你的映像可用

这是我在2017年欧洲、中东和非洲(EMEA)红帽技术交流会议上的一个会议记录,该会议集合了EMEA所有红帽解决方案架构师和顾问。它主要讨论在创建运行于Open...

2199
来自专栏信达雅

OpenShift 的容器镜像(第 3 部分):使您的镜像易用

这是我在欧洲,中东和非洲(EMEA)红帽技术交流 2017 会议上的一个会议记录,与会者包括 EMEA 所有红帽解决方案架构师和顾问。会议的主要内容包括了在创建...

2256
来自专栏北京马哥教育

docker容器技术系列一:基本概念

前言:从去年下半年开始,我们就尝试在使用docker部署生产应用,至现在已经有十多个项目使用了docker容器部署,docker为我们节约 了大量的服务器资源,...

3004
来自专栏北京马哥教育

写给新手的十一条 Docker 守则

1675
来自专栏格子的个人博客

vSphere Hypervisor 6.5 虚拟机创建和操作系统安装

在上一篇博客中,介绍了vSphere Hypervisor 6.5的安装过程:包括镜像下载、定制和安装以及部分问题解决,一路磕磕碰碰,最终也算是把vSphere...

1113
来自专栏SDNLAB

Docker生态系统系列之网络和通信

编者按:网络一直是Docker集群中的最令人头疼的问题,目前Docker已经收购了SocketPlane团队来解决相关问题,也发布了 libnetwork项目。...

3349
来自专栏程序你好

从 Docker 的新手村出发?那么你需要这11条守则

1012

扫码关注云+社区