有关容器的一些问题,例如:


配置管理工具在不变的基础结构中起什么作用?
容器编排可以解决哪些问题?
简单AWS中的CI / CD容器

我的问题:


什么是真正的“容器”(在DevOps中)?
为什么是他们使用了吗?


#1 楼

关于容器的第一件事是:

它首先是一个过程。

一旦被理解,就可以开始理解容器如何比较与虚拟机形成对比。容器和虚拟机都共享与其主机的隔离。隔离方法是关键的区别。

容器进程使用OS内核主机的扩展,在这些主机进程上运行它们可以将自身与其他进程隔离。其他扩展也提供磁盘和资源隔离。容器与主机OS共享其内核和内存。

虚拟机使用虚拟机管理程序将VM与主机隔离。这是一层软件,可将对资源的请求从“来宾”(VM)转发到硬件。磁盘虚拟化提供磁盘隔离。 VM不与主机共享内核,它们将自己的内核加载到VM专用的内存空间中。

这种差异的一个重要影响是容器必须与主机兼容。例如,不可能在Linux主机上运行基于Windows Nano Server的容器,或者直接在Windows主机上运行Ubuntu容器。相比之下,虚拟机可以运行任何内核,而与主机操作系统无关。在Windows主机上运行Linux容器时,Docker在Linux VM中运行该容器。

操作上的差异在于敏捷性:容器的启动和停止速度与正常过程差不多。虚拟机“更重”,需要为其留出专用资源,并且启动和关闭所需的时间更长。

容器为DevOps操作模型提供了很多灵活性:
容器隔离软件组件的依赖关系。开发人员可以使用容器来确保应用程序模块在QA / UA / Production中也能在其开发计算机上正常运行
容器使用软件定义的网络进行通信
容器定义是声明性的,可以由源代码控制
容器管理系统(Kubernetes,DC / OS,Swarm)可以管理硬件资源(计算/ RAM /存储)池并动态缩放容器


评论


还要感谢va​​grant :)我也对vSphere提出了最后3个要点:

–滕西拜
17 Mar 6 '17 at 18:49

#2 楼

“容器”一词是指现代Linux内核上可用的轻量级虚拟化技术,该技术与FreeBSD jails非常相似。

,一个较旧的,不可容器的Linux内核能够同时运行进程。系统的某些属性是进程专用的,例如进程环境或进程内存:只有拥有这些属性的进程和操作系统本身才能访问此数据。 (有很多漏洞,例如某些ps实现,但这实际上是真的!)进程之间共享其他一些属性,例如文件系统和网络接口。

现代的容器- Linux内核能够将系统的更多属性作为与一个或一组进程相关联的私有数据来处理。结果上下文是一个容器,而不是使用操作系统初始化的文件系统和网络接口在“初始容器”中运行程序,而是可以在其他容器中运行进程,以便它们看到不同的文件系统和文件。网络接口的不同列表。因此,在不同容器中运行的两个进程仅真正共享内核。您可能对chroot命令很熟悉,该命令可以在不同的文件层次结构中运行进程,容器使这一想法更进一步。希望它有助于阐明什么是容器。现在,它们有什么用?

docker实现了Linux内核容器功能的流行接口,它是一个命令行实用程序,可用于生成代表文件系统(docker映像)的工件,并在其中运行进程的容器中文件系统是可访问的。该软件套件还能够构建临时虚拟网络系统,以使多个容器在专用网络上进行通信。

基于容器的技术便于:


描述可伸缩的复杂部署。
为应用程序开发人员提供与生产环境非常相似的环境。
实现不可变服务器模式,因为软件制品通常描述了一个完整的操作系统,而不仅仅是一个应用程序包。如今,虚拟化技术的范围非常小,我们可以将其在某些情况下的普及程度与计算机语言的普及程度进行比较:这可能取决于每个解决方案的技术优缺点,而且还取决于很多因素我都将其标记为“机会”。)

评论


Windows 16不再具有Linux的功能

–滕西拜
17 Mar 6 '17 at 18:53

链接以支持我的主张docs.microsoft.com/en-us/virtualization/windowscontainers/…

–滕西拜
17 Mar 6 '17 at 19:45

#3 楼

通常,容器是指类似于docker容器的东西,它们已经普及了名称。
软件运行
被包装到隔离的容器中。与VM不同,容器不会
捆绑完整的操作系统-只需要使软件工作所需的库和设置即可。容器(lxc)的目标是将过程与其宿主系统隔离开来,首要目标是避免过程被接管宿主系统。在现代的“容器”定义中,您将或多或少地发布一个用于运行时的软件包,该软件包已经包括您的应用程序,必要时它是基础中间件以及所有必需的库,并确保它将在任何兼容的系统上运行。 >
第二个优点是,它允许在不同版本中使用具有相同依赖项的多个应用程序,而无需大量调整其环境变量,从而可以加载正确的应用程序。

不太可能对VM像虚拟盒子虚拟机或AWS上的EC2实例这样的系统,容器仅在文件系统级别是虚拟的,并且仅在内存堆栈上是隔离的。它们仍然共享相同的主机,并且它们下的操作系统将仲裁cpu ticks。

虚拟机在硬件级别是虚拟的,并且您在其中运行操作系统,容器在OS上是虚拟的级别,然后在其中运行一个流程。

评论


嗯,所以像VirtualBox映像(或VirtualBox中所谓的东西)之类的东西也可以称为“容器”,或者我不明白吗?

– Pierre.Vriens♦
17 Mar 6 '17 at 17:36

看到我忘记了一部分问题,在扩展答案时增加了区别。

–滕西拜
17 Mar 6 '17 at 17:39

#4 楼

根据AWS的定义:


容器是一种操作系统虚拟化方法,允许您在资源隔离的
进程中运行应用程序及其依赖项。容器使您可以轻松地将应用程序的代码,配置和依赖项打包到易于使用的构建块中,以提供环境一致性,运营效率,开发人员生产力和版本控制。容器可以帮助确保应用程序快速,可靠且一致地部署
,而不管部署环境如何。容器还可以为您提供更多资源资源的细粒度控制,从而改善您的基础架构效率。这样它就可以自给自足,并且可以在任何平台上运行,从而减轻了安装和安装工作时的痛苦。