Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >什么是标准容器(2021 版)

什么是标准容器(2021 版)

作者头像
用户5166556
发布于 2023-03-18 06:25:57
发布于 2023-03-18 06:25:57
7500
举报

OCI 运行时规范:

  • 容器是运行进程的隔离和受限的盒子 📦
  • 容器将应用程序及其所有依赖项(包括操作系统库)打包在一起
  • 容器是为了可移植性——任何兼容的运行时都可以运行标准容器
  • 容器可以使用 LinuxWindows 和其他操作系统来实现
  • 虚拟机也可以用作标准容器 🤐

有很多方法可以创建容器,尤其是在 Linux 等上。除了超级广泛的 Docker 实现,您可能听说过 LXC、systemd-nspawn,甚至 OpenVZ。

容器的一般概念是相当模糊的。什么是对的通常取决于上下文,但上下文本身并不总是明确给出。例如,有一种常见的说法,容器是 Linux 进程,或者容器不是虚拟机。然而,第一个陈述只是对解释 Linux 容器的过于简单化的尝试,第二个陈述并不总是正确的。

在本文中,我不是要回顾创建容器的所有可能方法。相反,本文是对 OCI 运行时规范的分析。结果证明该规范是一个有见地的阅读!例如,它给出了标准容器的定义(不,它不是一个过程),并阐明了何时可以将虚拟机视为容器。

Docker 和 Podman 带给我们的容器是符合 OCI 的。今天,我们甚至可以互换使用术语容器、Docker 容器和 Linux 容器。然而,这只是一种符合 OCI 的容器。所以,让我们仔细看看 OCI 运行时规范。

什么是开放容器计划 (OCI)

Open Container Initiative (OCI) 是一个开放的治理结构,由 Docker 和其他容器行业的知名参与者于 2015 年建立,旨在表达围绕容器格式和运行时创建开放行业的标准。换句话说,OCI 为操作系统进程和应用程序容器的标准制定规范。

这是我的理解。到 2015 年,Docker 已经获得了相当大的知名度,但还有其他竞争项目在实现自己的容器,如 rkt 和 lmctfy。显然,OCI 的建立是为了标准化做容器的方式。事实上,它使 Docker 的容器实现成为一个标准的实现,但也包含了一些非 Docker 部分。

什么是 OCI 容器

那么,如今 OCI 是如何定义 Container 的呢?

标准容器是用于执行具有环境被隔离和资源受限制的进程环境。

为什么我们需要容器?

定义软件交付单元...标准容器的目标是以自描述和可移植的格式封装软件组件及其所有依赖项,以便任何兼容的运行时都可以运行它而无需额外的依赖项,不管底层机器和容器的内容。

好的,我们可以用容器做什么?

可以使用标准容器工具创建、启动和停止;使用标准文件系统工具复制和快照;并使用标准网络工具下载和上传。

OCI 运行时必须支持的容器操作:Create、Start、Kill、Delete和Query State。

嗯,有道理。但是……容器不能是进程!根据 OCI 运行时规范,它更像是一个隔离且受限制的盒子,用于在内部运行一个或多个进程。

Linux 容器与其他容器

除了容器的操作和生命周期,OCI Runtime Spec 还规定了容器的配置和执行环境。

根据 OCI 运行时规范,要创建容器,需要为运行时提供所谓的文件系统包,该包由一个必需 config.json 文件和一个包含未来容器根文件系统的可选文件夹组成。

题外话:bundle 通常是通过解压容器镜像获得的,但镜像不是运行时规范的一部分。相反,它们受专用 OCI 镜像规范的约束。

config.json 包含对容器实施标准操作所需的数据(创建、启动、查询状态、终止和删除)。但是当涉及到 config.json 文件的实际结构时,事情开始变得非常有趣。

配置由公共部分和特定于平台的部分组成。公共部分包括 ociVersion,root 包内的文件系统路径, 额外 mounts 的 root,process 在容器中启动的 user, 和 hostname. 嗯...但是著名的命名空间和 cgroup 在哪里?

在撰写本文时,OCI 运行时规范为以下平台定义了容器:Linux、Solaris、Windows、z/OS 和 Virtual Machine。

等等,什么?!虚拟机是容器??!🤯

特别是,Linux 特定部分引入了(除其他外)pid、network、mount、ipc、uts 和用户命名空间、控制组和 seccomp。相比之下,特定于 Windows 的部分带有自己的隔离和限制机制,由 Windows 主机计算服务 (HCS) 提供。

因此,只有 Linux 容器依赖于命名空间和 cgroup。但是,并非所有标准容器都是 Linux。

虚拟机与容器

最广泛使用的 OCI 运行时是 runc 和 crun。不出所料,两者都实现了 Linux 容器。但正如我们刚刚看到的,OCI 运行时规范提到了 Windows、Solaris 和其他容器。对我来说更有趣的是,它定义了 VM 容器!

容器不是要取代虚拟机作为相同执行环境抽象的更轻量级的实现吗?

不管怎样,让我们仔细看看 VM 容器。

显然,它们不受 Linux 命名空间和 cgroup 的支持。相反,特定于虚拟机的容器配置提到了管理程序、内核和 VM 镜像。因此,隔离是通过虚拟化某些硬件(管理程序)然后在其上启动成熟的操作系统(内核 + 镜像)来实现的。由此产生的环境是我们的盒子,即一个容器。

请注意,OCI 运行时规范中提到的 VM 镜像与用于创建包的传统容器镜像无关。捆绑根文件系统单独挂载到 VM 容器中。

因此,基于 VM 的容器是一回事!

但是,OCI VM 容器的唯一未弃用实现,即 Kata 容器,在其常见问题解答中包含以下内容:

Kata Containers 仍处于形成阶段,但该项目的技术基础——Clear Containers 和 runV——被中国最大的电子商务公司京东等组织在全球企业范围内使用(按收入计算)。

MicroVM 与容器

Linux 容器最酷的部分之一是它们比虚拟机轻得多。启动时间不到一秒,几乎没有空间和运行时开销。然而,他们最强大的部分也是他们的弱点。Linux 容器之所以如此之快,是因为它们是常规的 Linux 进程。因此,它们与底层 Linux 主机一样安全。因此,Linux 容器仅适用于受信任的工作负载。

由于共享基础设施变得越来越普遍,因此仍然需要更强大的隔离。无服务器/FaaS 计算可能是最突出的例子之一。通过在 AWS Lambda 或类似环境中运行代码,您就不再需要处理服务器抽象了。因此,开发团队不需要虚拟机或容器。但从平台提供商的角度来看,使用 Linux 容器在同一主机上运行不同客户的工作负载将是一场安全噩梦。相反,函数需要在像 Linux 容器一样轻量级和像虚拟机一样安全的东西中运行。

Firecracker 的主要组件是一个虚拟机监视器 (VMM),它使用 Linux 内核虚拟机 (KVM) 来创建和运行微型虚拟机。Firecracker 拥有简约的设计。它排除了不必要的设备和面向访客的功能,以减少每个 microVM 的内存占用和攻击面区域。这提高了安全性,减少了启动时间,并提高了硬件利用率。Firecracker 也已集成到容器运行时中,例如 Kata Containers 和 Weaveworks Ignite。

但无论是否令人惊讶,Firecracker 本身并不是 OCI 兼容的运行时......然而,似乎有一种方法可以将 OCI 运行时放入 Firecracker 微型虚拟机中并获得所有领域的最佳效果 - 容器的可移植性,Firecracker 微型虚拟机的轻便性,并与主机操作系统完全隔离。

安全容器领域另一个有趣的项目是谷歌的 gVisor:

gVisor 是一个用 Go 编写的应用程序内核,它实现了 Linux 系统表面的很大一部分。它包括一个名为 runc 的开放容器计划 (OCI) 运行时,它在应用程序和主机内核之间提供隔离边界。runc 运行时与 Docker 和 Kubernetes 集成,使运行沙盒容器变得简单。

与 Firecracker 不同,gVisor 提供了一个 OCI-complaint 运行时。但是对于 gVisor 支持的容器,没有像 KVM 这样成熟的虚拟机管理程序。相反,它模拟用户空间中的内核。听起来很酷,但运行时开销可能很明显。

不仅仅是结论

总而言之,容器不仅仅是稍微孤立和受限的 Linux 进程。相反,它们是标准化的执行环境,可提高工作负载的可移植性。Linux 容器是当今最普遍的容器形式,但对更安全的容器的需求正在增长。OCI 运行时规范定义了 VM 支持的容器,而 Kata 项目使它们成为现实。所以,现在是探索容器世界的激动人心的时刻!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术爱好者社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
(译)为容器提供更好的隔离:沙箱容器技术概览
既然主流 IT 工业都在采用基于容器的基础设施(云原生方案),那么了解这一技术的短板就很重要了。Docker、LXC 以及 RKT 等传统容器都是共享主机操作系统核心的,因此不能称之为真正的沙箱。这些技术的资源利用率很高,但是受攻击面积和潜在的攻击影响都很大,在多租户的云环境中,不同客户的容器会被同样的进行编排,这种威胁就尤其明显。主机操作系统在为每个容器创建虚拟的用户空间时,不同容器之间的隔离是很薄弱的,这是造成上述问题的根本原因。基于这样的现状,真正的沙箱式容器,成为很多研发工作的焦点。多数方案都对容器之间的边界进行了重新架构,以增强隔离。本文覆盖了四个项目,分别来自于 IBM、Google、Amazon 以及 OpenStack,几个方案的目标是一致的:为容器提供更强的隔离。IBM Nabla 在 Unikernel 的基础上构建容器;Google 的 gVisor 为运行的容器创建一个特定的内核;Amazon 的 Firecracker 是一个超轻量级的沙箱应用管理程序;OpenStack 将容器置入特定的为容器编排平台优化的虚拟机之中。下面对几个方案的概述,有助于读者应对即将到来的转型机会。
崔秀龙
2019/07/24
3.1K0
(译)为容器提供更好的隔离:沙箱容器技术概览
Kata Containers及相关vmm介绍「建议收藏」
Kata Containers 是轻量级虚拟机的一种新颖实现,可无缝集成到容器生态系统中。 Kata Containers 与容器一样轻巧快速,并与容器管理层集成,同时还提供 VM 的安全优势。
全栈程序员站长
2022/09/30
2.5K0
Kata Containers及相关vmm介绍「建议收藏」
干货|浅析 k8s 容器运行时演进
在docker/k8s时代,经常听到CRI, OCI,containerd和各种shim等名词,看完本篇博文,您会有个彻底的理解。
CloudBest
2021/03/12
1.2K0
干货|浅析 k8s 容器运行时演进
容器安全和安全运行时的重要性
容器彻底改变了我们开发和部署应用程序的方式,提供了封装应用程序及其依赖项的轻量级和可移植环境。但我们如何保证它们的安全呢?
我是阳明
2023/10/27
6190
容器安全和安全运行时的重要性
K8S Runtime 种类多,使用复杂?那是你没明白其中的门道
近年来,Runtime(容器运行时)发展迅速,种类也日渐丰富:Docker、rkt、containerd、cri-o、Kata、gVisor……面对这么多的选择,如果你正打算部署一个容器系统或 Kubernetes 集群,你会如何选择呢?在这篇文章中,来自 PingCAP 的工程师吴叶磊将从典型的 Runtime 架构、OCI、CRI 与被滥用的名词“Runtime”等方向,生动阐述什么是 Runtime 以及它们的关系和特点。
马哥linux运维
2019/05/15
2.9K0
K8S Runtime 种类多,使用复杂?那是你没明白其中的门道
一文搞懂 Container
设想一下,在我们的日常项目开发过程中,存在一个应用服务,其使用一些基础库函数并具有某些依赖项。如果我们在不支持这些依赖项的环境平台上运行此应用程序,那么,我们可能会遇到意外错误。随着 DevOps 及云原生理念的注入,我们希望我们所开发的应用程序能够可以跨多个操作系统及平台正常运行。
Luga Lee
2021/12/03
2.1K1
一文搞懂 Container
大话 Kubernetes Runtime
回想最开始接触 k8s 的时候, 经常搞不懂 CRI 和 OCI 的联系和区别, 也不知道为啥要垫那么多的 “shim”(尤其是 containerd-shim 和 dockershim 这两个完全没啥关联的东西还恰好都叫 shim). 所以嘛, 这篇就写一写 k8s 的 runtime 部分, 争取一篇文章把下面这张 Landscape 里的核心项目给白话明白:
iMike
2019/06/04
1.3K0
大话 Kubernetes Runtime
容器安全与安全运行环境的重要性
了解容器运行环境的工作机制,缘何若攻击者突破容器的限制,过度耦合的运行环境可能造成主机被接管,以及gVisor和Kata Containers等安全容器运行环境的好处。
云云众生s
2024/03/28
2110
关于容器和容器运行时的那些事
容器,容器编排,微服务,云原生,这些无疑都是当下软件开发领域里面最热门的术语。容器技术的出现并迅速的广泛应用于软件开发的各个领域里,主要的原因是容器技术革命性的改变了软件开发和部署的基本方式。作为一个架构师,了解容器技术是非常重要的一个话题,我们今天就来聊聊它。
yuanyi928
2020/08/12
1.7K0
关于容器和容器运行时的那些事
运维锅总详解容器OCI规范
OCI是什么?OCI的镜像规范和运行时规范有哪些具体内容?Docker实现了OCI规范了吗?实现OCI规范的开源项目有哪些?OCI诞生背景及历史演进又有哪些内容?希望读完本文,能帮您解答这些疑惑!
锅总
2024/07/20
2570
运维锅总详解容器OCI规范
真正运行容器的工具:深入了解 runc 和 OCI 规范
我们谈谈位于 Docker、Podman、CRI-O 和 Containerd 核心的工具:runc。
没有故事的陈师傅
2021/11/02
3.7K0
真正运行容器的工具:深入了解 runc 和 OCI 规范
基于Rust-vmm实现Kubernetes运行时
周亮宇,腾讯云容器技术专家,负责腾讯云容器服务及EKS弹性容器服务,在云计算领域有着丰富的经验。
腾讯云原生
2020/08/18
3.2K1
Containerd深入浅出-安全容器篇
Containerd 是一个高度模块化的高级运行时,所有模块均可插拔,模块均以 RPC service 形式注册并调用(gRPC 或者 TTRPC)。不同插件通过声明互相依赖,由 Containerd 核心实现统一加载,使用方可以自行实现插件以实现定制化的功能。当然这种设计虽然使得 Containerd 拥有强大的跨平台、可插拔的能力,同时也带来一些缺点,模块之间功能互调必须通过 RPC 调用。
zouyee
2022/11/07
1.1K0
Containerd深入浅出-安全容器篇
Docker、Containerd、RunC分别是什么
上一篇文章《真正运行容器的工具:深入了解 runc 和 OCI 规范》已经讲清楚了Runc与OCI。这里再讲解一下概念。
没有故事的陈师傅
2021/11/02
4.3K0
Docker、Containerd、RunC分别是什么
云原生之容器安全实践
随着越来越多的企业开始上“云”,开始容器化,云安全问题已经成为企业防护的重中之重。
美团技术团队
2020/03/25
1.5K0
Docker 架构解析:理解 Docker 引擎和容器运行时
本篇博客《Docker 架构解析:理解 Docker 引擎和容器运行时》深入探讨了 Docker 技术的核心概念和关键组件。在引言部分,简要介绍了 Docker 的重要性和普及程度,并提出了本文的目的:帮助读者深入理解 Docker 架构、引擎和容器运行时。
猫头虎
2024/04/08
8540
Docker 架构解析:理解 Docker 引擎和容器运行时
容器技术创新漫谈
Kubernetes在2017年赢得了容器编排之战,使得基于容器+Kubernetes来构建PaaS平台成为了云计算的主流方式。在人们把关注的目光都聚焦在Kubernetes上时,容器技术领域在2018年也发生了很多创新,包括amazon最近开源的轻量级虚拟机管理器 Firecracker,Google在今年5月份开源的基于用户态操作系统内核的 gVisor 容器,还有更早开源的虚拟化容器项目 KataContainers,可谓百花齐放。一般的开发者可能认为容器就等于Docker,没想到容器领域还在发生着这么多创新。我在了解这些项目时,发现如果没有一些背景知识,很难get到它们的创新点。我试着通过这篇文章进行一次背景知识的梳理。让我们先从最基本的问题开始:操作系统是怎么工作的?
mazhen
2023/11/24
3830
容器技术创新漫谈
Containerd深度剖析-runtime篇
虽然容器领域的创业随着CoreOS、Docker的卖身,而逐渐归于平寂,但随着Rust语言的兴起,Firecracker、youki项目在容器领域泛起涟漪,对于云原生从业者来说,面试等场景中或多或少都会谈论到容器一些的历史与技术背景。
zouyee
2022/11/07
1.4K0
Containerd深度剖析-runtime篇
AWS的“炮仗”与Serverless
Serverless Computing,即”无服务器计算”,这一概念在刚刚提出的时候并没有获得太多的关注,直到2014年AWS Lambda这一里程碑式的产品出现。通过将无服务器计算的概念嵌入到整个云计算服务的整体产品框架中,无服务器计算正式走进了云计算的舞台。2017年,AWS发布了Fargate产品以充实自己的无服务器计算产品线。
Linux阅码场
2019/07/12
1.5K0
AWS的“炮仗”与Serverless
容器运行时
要把进程运行在容器中,还需要有便捷的SDK或命令来调用Linux的系统功能,从而创建出容器。容器的运行时(runtime)就是运行和管理容器进程、镜像的工具。
CNCF
2022/11/28
1.6K0
容器运行时
相关推荐
(译)为容器提供更好的隔离:沙箱容器技术概览
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文