容器简介

介绍

容器是一个软件单元,它包装了代码以其所需的依赖性,以便在孤立的、受控的环境中运行,这使您能够以可预测、可重复的方式运行应用程序,而无需在各种开发和生产环境中不一致的代码执行的不确定性。

在物理资源分配方面,容器提供计算功率和内存的有效分配,但容器还通过加强应用程序代码和基础设施代码的分离来实现新的设计范式。

考虑到集装箱带给桌子的广度,本文将带你加速使用常见的相关术语。在对集装箱的好处的一般介绍之后,你将了解集装箱运行时间,集装箱编排集装箱引擎等术语之间的差异。

<$>[注] 注: 本文将抽象容器的功能集和益处,而不是具体的产品,但学习如何使用容器最终将涉及学习如何使用Docker。

此外,这里的重点只集中在专注于隔离单个应用程序的容器上,这就是大多数人目前与容器技术相关联的容器的当代实施情况。 虽然容器技术如 LXC在Docker等技术之前就存在,甚至作为Docker部分早期开发的基础,但LXC在设计和实际使用方面已经足够不同,以免被视为本文的范围之外。

集装箱的好处

容器与虚拟机等选项相比,其资源消耗效率高,例如CPU计算功率和内存,它们在如何隔离应用程序以及如何抽象应用程序层远离基础设施层方面都有设计优势。

在项目层面上,这种抽象允许团队和团队成员在项目中工作,而不存在干扰项目的其他部分的风险。应用程序开发人员可以专注于应用程序开发,而基础设施工程师可以专注于基础设施。

容器为团队提供更顺利的开发和生产之间过渡。例如,如果您需要在服务器上运行 Node.js 应用程序,一个选项是直接安装 Node.js. 这是一个简单的解决方案,当您是一个单一的开发人员在单一的服务器上工作时。

在开发层面,容器的可移植性允许基础设施的设计,而不必考虑应用程序代码的不可预测的执行。

  • 以完全相同的方式运行应用程序,跨多个机器,这意味着本地开发和生产中的容器可以可靠地预测,并且容器可以在开发人员之间共享
  • 运行多个容器作为一个连接的应用程序堆栈。

这些特性可能会使容器看起来类似于虚拟机,但差别在于其底层设计和随后的效率。现代容器技术是专门设计的,以避免虚拟机的沉重资源需求。虽然容器共享相同的可移植性和可重复性原则,但它们是设计在不同的抽象水平。

因此,集装箱相对较轻,资源需求较低,集装箱技术随后培育了一个丰富的生态系统,以支持集装箱中心发展,包括:

  • 构建容器图像
  • 存储图像在注册表和存储库
  • 通过数据量存储数据
  • 集成网络解决方案

严格来说,这些工具和好处是集装箱技术的边缘上的辅助功能,然而,由于它们的需求普遍存在,它们通常以完整的集装箱解决方案组合在一起。

集装箱术语的定义

由于其广泛的用例,容器可以指多种东西. 为了帮助您理解相互关联的概念之间的细微差别,以下是一些常被混淆或在错误中相互使用的关键术语:

  • 操作系统:这是管理您计算机上所有其他软件以及硬件的软件. 通常缩写为"OS",这方面的一个例子是Linux,它本身有[许多分布,如Ubuntu (https://www.digitalocean.com/community/conceptual_articles/how-to-choose-a-linux-distribution). (). ( )* Kernel:这是OS的组件,专门用来与机器的硬件进行最基本的低等对接. 它翻译了软件进程与硬件之间对物理资源的要求. 资源包括来自CPU的计算功率,来自RAM的内存分配,以及来自硬盘的 I/O. ( ( )* ** 容器**:这是一套软件,用其必要的依赖性包装代码,以便在孤立的受控制的环境中运行。 他们将一个OS虚拟化,但不是内核. (_ ( )* ** 集装箱运行时间**: 这管理容器的起动和存在,以及容器如何实际执行代码. 不管你选择哪种容器解决方案,你基本上选择不同种类的容器运行时间作为基础. 此外,完整的集装箱解决方案往往同时使用多个运行时间。 集装箱运行时间本身分为两类: -开放集装箱倡议: 这是创建和运行容器的基线运行时间,几乎没有其他的. 一个例子是 " runc " ,这是Docker最常用的,用戈兰克语写成。 另一种选择是用C来写作的 " Crun " (红色帽子),意在更快和轻量级。 () ) - ** 容器运行时接口** : 这种运行时间更注重于集装箱管弦乐. 例如,早期的 " Dockershim " 已逐渐减少,以利更完整的Docker的 " 集装箱 " ,或红色帽子的 " CRI-O " ( -- ( )* ** 容器图像**: 这些是容器需要的软件包,包含代码,运行时间,系统库和依赖性. 通常它们从像Ubuntu这样的OS图像开始. 这些图像可以手动构建,也可以从图像注册处取回. () ) - 图像登记: 这是容器图像存储和共享的解决方案. 最突出的例子是Docker Hub,但存在其他的公共图像注册,私人图像注册可以实施. () ) - 图像存储器: 这是图像登记册内容器图像的具体位置。 它包含最新的图像及其在登记册中的历史。 () ( )* ** 集装箱发动机**: 集装箱技术的完整解决方案,多克就是一例. 当人们讨论集装箱技术时,他们经常提到的是集装箱发动机. 这包括集装箱、集装箱运行时间、集装箱图象和制造工具,可能包括集装箱图象登记和集装箱管弦。 Docker的替代品是一叠由Podman、Buildah和Skopeo组成的红帽子
  • ** 集装箱管弦乐团**: 集装箱部署自动化. 管弦包括提供、配置、时间安排、规模、监测、部署等等。 Kubernetes是一个受欢迎的集装箱管弦乐解决方案的例子. (_) (英语)

虽然这些术语都指集装箱技术的特定方面,但如果一个非正式的讨论集装箱混淆了这些硬线定义,不要感到惊讶。

集装箱的目标

集装箱解决方案共享一些必须解决的常见问题,才能成功:

  • ** 可移植性**:自成一体的应用程序与依赖性相捆绑,使集装箱能够预测。 任何机器都以同样的方式执行代码,因为容器会带来自己的可重复的环境。 () ( )* ** 效能**:集装箱不仅利用其主机的现有内核,而且往往只存在足够长的时间来执行它们负责的代码。 此外,集装箱的设计往往只在需要其操作的过程或应用时才存在,一旦任务完成就停止。 ( ( )* ** 无状态**:无国籍状态是集装箱设计中的理想,它力求使代码总是以同样的方式运行,而不需要了解过去或未来的代码处决。 然而,这种隔离做法被现实世界的需要所推后,并已实现,大多数集装箱发动机为持续数据提供了解决方案,其形式往往是集装箱之间可共享的容量存储。 (_ ( )* ** 联网**:虽然集装箱往往彼此完全隔离,但在许多情况下,集装箱必须相互沟通,与主机沟通,或与不同的集装箱集群沟通。 Docker既为同一Docker实例下存在的容器提供桥接联网,也为跨越不同Docker实例的容器提供覆盖联网。 (_ ( )* ** 记录**:按性质,集装箱难以检查。 解决记录错误和产出的办法使大规模集装箱部署更易于管理。 () ( )* ** 应用和基础设施脱钩**:应用逻辑应在负责该逻辑的容器内开始并停止。 在不同环境中管理和部署集装箱本身可以是基础设施小组的重点。 () ( )* ** 专业和微观服务**: 分散在多个集装箱中的责任分离使得能够使用微型服务而不是单体应用。 (_) (英语)

虽然容器可以提供不同的解决方案,但它们提供的解决方案源于尝试回答相同的问题,这些问题本身随着时间的推移随着最终用户的需求和期望而演变,使这一列表不断发展。

集装箱景观

实际上,选择一个集装箱就是选择一个集装箱引擎. 大多数集装箱引擎使用runc作为其OCI运行时间的组合,以及containerd作为其CRI。

最接近的竞争对手是Red Hat的解决方案堆栈Podman,它管理集装箱的运行时间;Buildah,它构建集装箱图像;和Skopeo,这是集装箱图像和图像注册表之间的接口。

最终,这些解决方案之间的差异取决于它们如何处理 root 访问和使用 daemons。Docker 需要 root 访问才能运作,这是一个额外的访问级别,扩大了潜在的安全问题。

集装箱管制

集装箱部署的下一个层次是自动化,集装箱管制自动化了许多步骤,通过在整个部署中始终对理想、定义的状态进行调整。

虽然完全沉浸在集装箱管制超出本文的范围,但有两个突出的玩家是Docker与Docker Compose和Docker Swarm模式,以及Kubernetes。在大致的复杂性顺序下,Docker Compose是一个处理单个主机上多集装箱部署的集装箱管制解决方案.当涉及多个主机时,需要Docker Swarm模式。

Kubernetes 是一个专门设计的集装箱管制解决方案,而 Docker 的管制解决方案与其对核心集装箱组件的关注保持平衡,而 Kubernetes 则针对管制的可扩展性和细微控制。

结论

本文概述了集装箱是什么以及它们给桌子带来了哪些好处。集装箱技术正在迅速发展,了解术语将对您的学习之旅至关重要。同样,了解集装箱的目标和导致其创建的竞争对手的景观,可以让你做出针对您的具体需求采用这项技术的明智决定。

额外资源

教程: 教程:

数字海洋产品:

Published At
Categories with 技术
comments powered by Disqus