什么是容器?为什么要使用它们?
容器已经成为当前DevOps革命背后的关键驱动力之一。它们为虚拟机(vm)提供了一种轻量级、可移植且经济高效的替代方案。它们还提供了一种更简单、更方便的方式来打包和部署现代应用程序。
容器发展的第一步可以追溯到1979年——随着Unix V7,引入了一种使用chrootchange root命令。
从那时起,资源隔离技术取得了长足的进步,出现了新的实现,例如FreeBSD监狱和LXC,在2000年代出现。
最初的采用也很慢。但这一切都随着码头工人在2013年。该平台使容器化的应用程序更容易部署和维护。因此,集装箱的使用迅速增加。
但是容器到底是什么呢?与托管应用程序的传统方法相比,它们有什么优势?
本文介绍了该技术的关键概念和优点。它还提供了额外的资源,您可以在其中更详细地了解容器。2022世界杯阿根廷预选赛赛程
什么是容器?
容器是一种应用程序部署技术,其作用类似于虚拟机(vm)。就像传统的虚拟化一样,容器为应用程序提供了隔离的环境。但是,它们使用不同的方法来划分基础设施资源。2022世界杯阿根廷预选赛赛程
vm使用虚拟机管理程序来模拟完全成熟的客户操作系统,而容器则共享虚拟机管理程序内核将主机操作系统与其他容器连接起来。
此外,它们为您的工作负载提供了更加精简的环境,因为它们不需要成熟的操作系统,而只提供资源,例如2022世界杯阿根廷预选赛赛程安装,依赖关系和代码,您的应用程序实际需要。
因此,容器可以显著降低应用程序的基础设施占用。它们也提供比vm更好的性能。它们能够更快地停止和启动,使它们对波动的规模需求更敏感。
容器可移植性
容器将应用程序与底层基础设施分离。这使开发人员的工作更轻松,因为他们可以将精力集中在编写代码而不是托管代码的环境上。
例如,它们可以在具有不同配置的不同服务器上复制容器,前提是每个服务器操作系统使用相同的Linux内核(或与容器环境兼容的内核)。这允许一组编码人员在一个项目上协同工作,而不管他们每个人使用的主机环境是什么。
而且,由于其紧凑的设计,容器也很容易融入持续集成(CI)和持续交付(CD)工作流。
容器用例
容器最适合现代云应用程序,这些应用程序基于松散耦合微服务的分布式架构。
这种方法提供了许多优于大型单片程序的优点。
例如,您可以跨vm集群复制微服务以提高容错性。这样,如果VM出现故障,应用程序将继续运行,并依赖于集群中的其他微服务。
类似地,它们可以帮助消除维护停机时间,因为您可以修补或更新容器的代码和操作环境,而不会影响集群中的其他容器。
了解更多关于微服务架构的知识
想了解更多关于微服务以及如何将应用程序迁移到容器化基础设施的知识吗?
我们的旅游指南容器在微服务架构中的作用我会告诉你怎么做。
容器的主要概念
以下概念对于理解容器平台(例如码头工人,在实践中起作用。
容器引擎
安装在主机上用于构建、运行和管理容器的应用程序。它是安装的核心,将容器系统的所有其他组件组合在一起。
容器的形象
一个只读的模板用于创建实际运行的容器。它由一组文件组成,这些文件将配置一个完全可操作的容器环境所需的所有要素捆绑在一起。
构成映像的每个文件都称为a层。这些层形成了一系列中间图像,分阶段在另一层之上构建。
因为容器映像是只读的,所以它们提供了现代容器映像的所有可靠性和一致性不可变的基础设施,避免了传统服务器模型中非常常见的配置漂移等问题。如果需要对容器环境进行更改,只需将以前的映像替换为更新后的映像,并从中启动替换容器。
父母的形象
容器映像的第一层和起始点。它为容器环境提供了基本的构建块,并为构建所有其他层提供了基础。
父映像通常是精简的Linux发行版。但它们也可以是一个应用程序框架,甚至是一个完整的应用程序堆栈——比如一个现成的应用程序内容管理系统(CMS)。
您可以从目录中导入预先配置好的父映像容器注册表服务,例如码头工人中心或谷歌容器注册表。或者,您可以使用自己现有的图像之一作为父图像。
基地图片
本质上是一个空的第一层,它允许您从头构建容器映像。基本映像通常适用于高级用户,他们希望完全控制其映像的每个部分。
容器
容器映像的活实例。一个运行容器主要包括:
- 发射时的图像。
- 顶层可写层,称为容器层,用于存储在整个运行时期间对容器所做的任何更改。
这种分层结构是容器效率的关键,因为它允许类似的容器共享对相同底层映像的访问,同时每个容器都保持自己的单独状态。
货柜形象卫生
由于底层映像构成了活动容器的大部分结构,因此映像卫生对于容器化部署的安全性和性能是绝对必要的。
首先让您的映像保持精简—映像越大,攻击面就越大,会降低性能的膨胀就越大。
因此,当您从容器注册表中提取父映像时,请避免自动使用您正在查找的映像的最新版本。
相反,寻找具有较小图像大小的合适替代品。然后,您可以根据需要将任何其他包和依赖项添加到自己的映像构建中。
您应该能够找到所选容器注册表中列出的每个映像的压缩大小,如下面的示例Ubuntu版本在Docker Hub上所示。
然而,您的映像优化不应该止步于此,因为您可以通过在自己的构建过程中清除不必要的工件来进一步简化映像。
学习如何创建自己的Docker镜像
在我们的初学者理解和构建Docker映像指南中,我们将带您一步一步地完成创建Docker映像的过程。
最后,作为防御容器安全漏洞的一部分,您应该使用映像漏洞扫描工具。其中包括容器注册表服务提供的内置产品以及第三方扫描程序,例如Anchore和克莱尔。
理想情况下,这些应该是完全自动化的,并集成到您的CI和CD工作流,因为这将有助于避免人工疏忽并加快开发时间。