什么是容器运行时?

现在是深入研究容器运行时的时候了,这样你就可以了解容器环境是如何构建的。本文中的信息部分是从Open Container Initiative(OCI)的官方文档中提取的,OCI是容器的开放标准,因此无论你的容器引擎是什么,这些信息都适用。

容器运行时

当你运行像podman run或docker run这样的命令时,后端会发生什么呢?以下是一个分步概述:

1. 如果镜像在本地不可用,则从镜像注册表中提取该镜像

2. 镜像被提取到一个写时拷贝文件系统上,所有容器层相互覆盖以创建一个合并的文件系统

3. 准备好容器挂载点

4. 元数据是从容器镜像设置的,包括覆盖CMD、用户输入的ENTRYPOINT、设置SECCOMP规则等设置,以确保容器按预期运行

5. 内核收到警报,向该容器(命名空间)分配某种隔离,如进程、网络和文件系统

6. 内核也会被警报为此容器(cgroups)分配一些资源限制,如CPU或内存限制

7. 系统调用(syscall)被传递到内核以启动容器

8. 设置SELinux/AppArmor

容器运行时负责上述所有内容。当我们想到容器运行时,我们想到的可能是runc、lxc、containerd、rkt、cri-o等。嗯,你没错。这些是容器引擎和容器运行时,每一个都是为不同的情况而构建的。

容器运行时更关注于运行容器,为容器设置命名空间和cgroup,也称为低级容器运行时。更高级别的容器运行时或容器引擎关注格式、解包、管理和镜像共享。它们还为开发人员提供API。

Open Container Initiative(OCI)

Open Container Initiative(OCI)是一个Linux基金会项目。其目的是围绕如何使用容器运行时和容器镜像格式设计某些开放标准或结构。它由Docker、rkt、CoreOS和其他行业领导者于2015年6月成立。

它使用两种规范来实现这一点:

1.镜像规格(image-spec)

该规范的目标是创建可互操作的工具,用于构建、传输和准备要运行的容器镜像。

该规范的高级组件包括:

——Image Manifest:描述构成容器镜像的元素的文档

——Image Index:镜像清单的注释索引

——Image Layout:表示镜像内容的文件系统布局

——Filesystem Layer:描述容器文件系统的变更集

——Image Configuration:确定适合翻译成运行时包的镜像的层顺序和配置的文档

——Conversion:解释此转换应如何进行的文档

——Descriptor:描述引用内容的类型、元数据和内容地址的引用

2.运行时规范(runtime-spec)

该规范旨在定义容器的配置、执行环境和生命周期。config.json文件为所有受支持的平台提供容器配置,并详细说明支持创建容器的字段。详细介绍了执行环境以及为容器生命周期定义的常见操作,以确保在容器内运行的应用程序在运行时之间具有一致的环境。

Linux容器规范使用各种内核特性,包括命名空间、cgroup、功能、LSM和文件系统jails来实现该规范。

小结

容器运行时由OCI规范管理,以提供一致性和互操作性。许多人使用容器时不需要了解它们是如何工作的,但是当你需要对容器的使用方式进行故障排除或优化时,了解容器是一个宝贵的优势。

原文链接:

https://opensource.com/article/21/9/container-runtimes

什么是容器运行时?_第1张图片

什么是容器运行时?_第2张图片

你可能感兴趣的:(内核,java,docker,python,linux)