通过深入了解容器运行时,了解容器环境的设置方式。在学习容器镜像时,我们讨论了容器的基础知识,但现在是深入研究容器运行时以了解容器环境构建方式的时候了。本文部分信息取自开放容器倡议组织(OCI)的官方文档,因此无论使用哪种容器引擎,信息都是一致的。容器运行机制那么,当你运行podmanrun或者dockerrun命令时,后台到底发生了什么?分步概述如下:如果本地没有镜像,则从镜像注册仓库registry中拉取镜像层彼此堆叠以形成合并的文件系统。为容器准备一个挂载点。从容器镜像设置元数据,包括覆盖CMD、用户输入的ENTRYPOINT、设置SECCOMP规则和其他设置以确保容器按预期运行提醒内核为容器分配某种隔离,例如进程、网络和文件系统(namespacenamespace)提醒内核给容器分配一些资源限制,比如CPU或内存限制(controlGroupcgroup)传递一个系统调用syscall给内核启动容器并设置SELinux/AppArmor容器运行时负责以上所有工作。提到容器运行,我们可能会想到runc、lxc、containerd、rkt、cri-o等,嗯,你没有看错。这些是容器引擎和容器运行时,每一个都是为不同的情况而构建的。容器运行时更??专注于运行容器,为容器设置命名空间和控制组(cgroups),也称为底层容器运行时。高级容器运行时或容器引擎专注于格式化、解包、管理和图像共享。他们还为开发人员提供API。开放容器计划(OCI)开放容器计划(OCI)是Linux基金会的一个项目。其目的是围绕如何使用容器运行时和容器图像格式设计一些开放标准或结构。它由Docker、rkt、CoreOS和其他行业领导者于2015年6月创立。它通过两个规范完成以下任务:1.镜像规范该规范的目标是创建可互操作的工具,用于构建、传输和准备运行的容器镜像。规范的高级组件包括:镜像清单——描述构成容器镜像的元素的文件镜像索引——镜像清单的注释索引镜像布局——镜像内容的文件系统布局文件系统布局——a描述容器文件系统配置的变更集图像——一个确定图像层的顺序和配置以转换为运行时的文件。引用内容2.运行时规范本规范用于定义容器的配置、执行环境和生命周期。config.json文件为所有支持的平台提供容器配置,并详细定义用于创建容器的字段。在详细定义执行环境时,也描述了为容器的生命周期定义的通用操作,以保证运行在容器中的应用程序在不同的运行环境之间具有一致的环境。Linux容器规范使用了各种内核特性,包括命名空间namespace、控制组cgroup、capability、LSM和文件系统隔离监狱等来实现规范。总结容器运行时通过OCI规范进行管理,以提供一致性和互操作性。许多人不需要了解容器的工作原理即可使用容器,但当您需要进行故障排除或优化时,了解它们是一个宝贵的优势。
