容器技术概述

容器是一个允许我们在资源隔离的过程中,运行应用程序和其依赖项的 、轻量的 、操作系统级别的虚拟化技术, 运行应用程序所需的所有必要组件都打包为单个镜像,这个镜像是可以重复使用的。当镜像运行时,它是运行在独立的环境中,并不会和其他的应用共享主机操作系统内存CPU磁盘。这保证了容器内的进程不会影响到容器外的任何进程。

01-os-virtualization.jpg

虚拟机和容器之间的区别

虚拟机通常包括整个操作系统和应用程序。还需要与他们一起运行的虚拟机管理程序来控制虚拟机。

因为它们包括操作系统,因此它们的大小是几千兆字节( 1千兆字节= 1GB)。使用虚拟机的一个缺点是它们需要几分钟的时间才能启动操作系统,和初始化它们托管的应用程序。另一方面,容器则是轻量级的,大部分是兆字节(1兆字节 = 1MB)大小的。容器的性能与虚拟机相比较,容器性能更好,可以立即启动。

02-windows-server-virtual-machines-vs-containers.png

容器解决什么问题?

当应用程序计算环境发生变化时,许多问题都会出现。有可能是开发人员将代码从开发环境推送到测试环境,然后再继续。例如:开发人员在Windows中编写应用程序代码,但上层环境(测试,阶段或产品)是基于Linux的。在这种情况下,当操作系统发生变化时,某些功能可能会停止工作。所以,基本上,当配套的软件环境不一样的时候,间歇性故障的几率会更高。

正如Docker的发明者Solomon Hykes所说:“你使用Python 2.7进行测试,然后在生产环境中运行Python 3,可能会发生一些奇怪的事情。或者你会依赖某个版本的一个SSL库,但是装了另外版本的SSL库。你在Debian上进行你的测试,生产环境是在RedHat上,可能发生各种奇怪的事情。

这种变化可能不仅是计算环境,也可能是网络的变化。 Hykes还补充说:“网络拓扑结构可能不同,或者安全策略和存储可能不同,但是软件必须在其上运行。

容器的优点

1.敏捷环境:容器技术的最大优势是比创建VM(虚拟机)实例更快的速度。它们的轻量化在性能和占用空间方面的开销更小。

2.提高生产力:容器通过消除跨服务依赖性和冲突来提高开发人员的生产力。每个容器都可以被看作是一个不同的微服务,因此可以独立升级,而不需要考虑它们的同步。

3.版本控制:容器的每个镜像都可以进行版本控制,因此可以跟踪不同版本的容器,注意版本之间的差异等。

4.计算环境可移植性:容器封装了运行应用程序所必需的所有相关细节,如应用程序依赖性和操作系统。这有助于简化容器镜像从一个环境到另一个环境的可移植性。例如,可以使用相同的镜像在Windows / Linuxdev(生产) / test(测试) / stage(阶段)环境中运行。

5.标准化:大多数容器基于开放标准,可以运行在所有主要的Linux发行版,微软等。

6.安全:容器将一个容器的进程与另一个容器以及底层基础架构隔离开来。因此,一个容器中的任何升级或更改都不会影响另一个容器。

容器的缺点

1.复杂性增加:使用n个容器运行一个应用程序,复杂性因素也随之增加。在生产环境中管理这么多的容器将是一项具有挑战性的任务。像KubernetesMesos这样的工具可以用来管理n个容器。

2.本机Linux支持:大多数容器技术(如Docker)都基于Linux容器(LXC)。因此,与在Linux上原生地运行这些实例相比,在微软环境下运行这些容器就显得有点麻烦了,它们的日常使用会带来复杂的问题。

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

容器的分类

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

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

当需要配置一组具有相同配置的操作系统时,它们非常有用。因此,它有助于创建模板,这可以用来创建与另一个操作系统类似的风格。

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

03-os-vs-app-containers.jpg

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

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

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

DockerRocket这样的容器技术就是应用程序容器的例子。

本文的版权归 神话_Tyrannosaurus 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

谈网络适配器

谈网络适配器,就是网卡,在大型网站架构设计中,网络规划十分重要。 本文节选自《Netkiller Architect 手札》 21.5. 网卡 21.5.1. ...

3197
来自专栏云计算

容器技术概述

容器 (Container) 是一种在资源隔离状态下,允许我们运行应用程序及其依赖项,操作系统层面的轻量级、虚拟化技术。在容器中,应用程序运行所依赖的必要组件都...

2016
来自专栏施炯的IoT开发专栏

Application Architecture Guide 2.0 - CH 19 - Mobile Applications(2)

本文翻译“Authentication and Authorization”、“Caching”、“Communication”和“Configuration ...

1885
来自专栏SDNLAB

容器有很多优势,但它们是否安全?

容器被誉为是将应用程序部署到服务器上的非常有效的手段。容器(例如基于Docker开源标准的容器)比虚拟机消耗更少的资源,并且容器的设计更容易,且实例化和提供更快...

774
来自专栏SDNLAB

OpenStack Zun组件详解

2265
来自专栏云计算爱好者

简单介绍Docker的架构特性与局限

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是...

2026
来自专栏大魏分享(微信公众号:david-share)

五大Kubernetes最佳实践

2064
来自专栏IT大咖说

Rancher大中华区技术总监带你6分钟了解Rancher 1.5

摘要 Rancher容器管理平台1.5版已正式与大家见面了,此次分享将由Rancher Labs大中华区技术总监介绍Rancher的版本演进历史以及Ranche...

4098
来自专栏CSDN技术头条

Docker数据容器保护方式利弊

Docker是一个非常成功的Linux开源项目。它在Linux操作系统下无需增加管理器即可虚拟化应用程序。该应用程序常被抽象地误认为是操作系统(具有Linux内...

1957
来自专栏云计算D1net

想要使用容器技术 这5类遗留工具就应该被淘汰

充分利用容器并不只是安装Dockers和激活容器应用程序那么简单。你需要改进的同样还有监控方法、安全性能等。 这么做的理由是,容器并不只是对你过去工作中使用到的...

3318

扫码关注云+社区