容器究竟是什么?

104次阅读
没有评论

问题描述

在DevOps领域,容器是一个经常被提及的概念。对容器有一些问题,例如:“容器在不可变基础架构中扮演什么角色?”、“容器编排解决了哪些问题?”以及“如何在AWS中使用简单的CI/CD容器”等。以下是用户提出的几个具体问题:
1. 在DevOps的背景下,“容器”究竟是什么?
2. 它们为什么被使用?

解决方案

容器是一种轻量级的虚拟化技术,最早出现在现代Linux内核中,与FreeBSD的jails有很大相似之处。容器是一种进程的抽象,与虚拟机的隔离方式有关键的差异。

容器利用主机操作系统内核的扩展来隔离进程,以及提供磁盘和资源隔离。容器与主机操作系统共享内核和内存。这与虚拟机使用hypervisor来隔离虚拟机不同,hypervisor是一层软件,将“客户机”(虚拟机)的资源请求转发到硬件,虚拟机不共享内核,它们将自己的内核加载到专用于虚拟机的内存空间。

这一差异的重要影响之一是,容器必须与其主机内核兼容。例如,在Linux主机上无法运行基于Windows Nano Server的容器,或者在Windows主机上直接运行Ubuntu容器。与之相反,虚拟机可以运行任何内核,不受主机操作系统的影响。

操作上的差异在于,容器的启动和停止速度与普通进程类似,而虚拟机较“重”,需要专用资源,并且启动和关闭时间较长。

容器为DevOps操作模型提供了很大的灵活性:
– 容器隔离了软件组件的依赖关系。开发人员可以使用容器来保证应用程序模块在开发机上和QA/UA/生产环境中都能正常运行。
– 容器使用软件定义的网络进行通信。
– 容器定义是声明性的,可以进行源代码控制。
– 容器管理系统(如Kubernetes、DC/OS、Swarm)可以管理硬件资源(计算/内存/存储)池,并动态扩展容器。

容器技术方便于:
– 描述可扩展的复杂部署。
– 为应用程序开发人员提供与生产环境非常相似的环境。
– 实现不可变服务器模式,因为软件构件通常描述整个操作系统,而不仅仅是应用程序包。

需要注意的是,现在容器的概念不再限于Linux。例如,Windows Server 2016也具有类似的功能,可以运行容器。

请注意:本解决方案涵盖了容器的定义、用途,以及与虚拟机的比较。对于Windows容器的支持,请参考官方文档 Windows Containers Quick Start

总而言之,容器是一种将应用程序、其依赖和配置打包成易于使用的构建块的技术,从而提供环境一致性、操作效率、开发人员生产力和版本控制。容器还能够快速可靠地部署应用程序,无论部署环境如何,确保应用程序能够快速启动、可靠运行,同时在资源上更加高效利用基础架构。

正文完