尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

runj 初探:为什么 FreeBSD 需要自己的 OCI 容器运行时(完整指南)

runj 初探:为什么 FreeBSD 需要自己的 OCI 容器运行时(完整指南) runj 初探为什么 FreeBSD 需要自己的 OCI 容器运行时完整指南【免费下载链接】runjrunj is an experimental, proof-of-concept OCI-compatible runtime for FreeBSD jails.项目地址: https://gitcode.com/gh_mirrors/ru/runjrunj是一个面向 FreeBSD 的实验性 OCI 兼容容器运行时它用 FreeBSD 原生的 jail 技术实现 OCI 容器规范让你可以用runj或 containerd 以标准方式在 FreeBSD 上运行容器。本文带你快速了解它是什么、解决了什么问题、以及如何跑起来。什么是 runj一个为 FreeBSD 打造的 OCI 容器运行时在 Linux 世界里runc、containerd 等 OCI 运行时早已成熟但FreeBSD 一直没有原生的 OCI 运行时。runj 填补的正是这个空白OCI 兼容支持create、start、state、kill、delete等标准 OCI 生命周期命令️基于 jail直接调用 FreeBSD 内核的 jail 系统调用jail_set(2)、jail_attach(2)等而非模拟 Linux 的命名空间支持 OCI bundle 与镜像既可以像 runc 一样直接运行 bundle也可以通过 containerd shim 用ctr拉起 OCI 镜像规格试验场以粗糙共识与可用代码的精神为 OCI 规格未来纳入 FreeBSD 支持做提案测试项目入口在 cmd/runj/main.go核心 jail 逻辑在 jail/jail.go。为什么 FreeBSD 需要自己的容器运行时现有的 OCI 运行时偏科LinuxOCI 运行时规范中大量字段带有平台前缀如linux.resources参考实现 runc 也深度绑定 Linux 内核特性命名空间、cgroups、seccomp。FreeBSD 的内核模型与 Linux 完全不同——硬把 Linux 运行时移植过来不如用 FreeBSD 自己的原生机制重写。jail 才是 FreeBSD 的容器FreeBSD 的 jail 是一项运行了二十多年的成熟隔离技术提供独立的文件系统根、网络栈vnet、主机名、SystemV IPC 命名空间等能力上与 Linux namespace 相当。runj 的设计思路非常直接把 OCIconfig.json中的配置翻译成jail(8)手册页里的那些参数。例如freebsd.jail中的ip4、vnet、sysvshm等字段一一对应 jail 的ip4、vnet、sysvshm参数映射关系详见 docs/oci.md。runj 的核心功能5 个命令走完全流程runj 实现了 OCI 规范中完整的核心生命周期覆盖清单见 docs/spec-coverage.md命令作用runj create $ID $BUNDLE创建容器此时 jail 已建立进程未启动runj start $ID启动容器内的进程runj state $ID查看容器状态runj kill $ID向容器进程发送信号runj delete $ID删除容器这种create 与 start 分离的设计正是 OCI 规范的要求也方便 containerd 这类上层引擎精细管理进程生命周期。快速上手如何准备 OCI bundle 并运行第一个容器运行一个容器需要两个东西根文件系统rootfsconfig.json配置文件合称 OCI bundle。runj 贴心地提供了demo子命令帮你偷懒下载一个现成的 FreeBSD 根文件系统runj demo download生成一份示例配置runj demo spec修改配置里的 root 路径与进程参数然后按生命周期命令依次执行如果用 containerd需 1.5仓库还内置了实验性 shim安装后指定运行时即可sudo ctr run --runtime wtf.sbk.runj.v1 --rm \ public.ecr.aws/samuelkarp/freebsd:13.1-RELEASE \ my-container \ sh -c echo Hello from the container!shim 的实现位于 cmd/containerd-shim-runj-v1/相关说明见 docs/containerd.md。编译安装很简单一条make install就能搞定构建规则见 Makefile。FreeBSD 专属扩展为 OCI 规格贡献新能力OCI 规格目前还没有 FreeBSD 字段runj 通过两种方式做了实验性扩展直接写进config.json使用 OCI 规范的freebsd.jail结构可配置host、ip4/ip4Addr、ip6、vnet、enforceStatfs、sysvmsg/sysvsem/sysvshm等独立的runj.ext.json文件放在 bundle 目录中runj 会自动合并方便不认识 FreeBSD 的工具生成的配置也能增补扩展举个例子想让你的容器继承宿主机的 IPv4 网络类似 Linux 的--nethost{ network: { ipv4: { mode: inherit } } }安全提醒runj 还是实验性项目 ⚠️请务必记住 README 中的重要警告runj 是概念验证proof-of-concept项目实现未经过安全评估不要用于生产环境也不要在其中运行依赖安全配置的工作负载。更多安全设计细节可阅读 docs/security.md。此外资源限制FreeBSD 内核的 RCTL 接口相当于 Linux 的linux.resources尚未实现是未来规划的方向。项目结构一览模块说明cmd/runj/runj主命令create/start/state/kill/delete/democmd/runj-entrypoint/进入 jail 并 exec 目标进程的小助手cmd/containerd-shim-runj-v1/containerd 集成 shimjail/jail 创建、挂载、网络、进程管理等核心逻辑containerd/shim 与 containerd 通信、进程与 IO 管理docs/OCI 扩展说明、规格覆盖、安全等文档总结runj 的意义不仅是一个能跑的运行时更是一个连接 OCI 容器世界与 FreeBSD jail 世界的桥梁。如果你想了解 FreeBSD 容器化的可能性或者想为 OCI 规格的 FreeBSD 支持出一份力这个以可用代码说话的实验项目值得一读。【免费下载链接】runjrunj is an experimental, proof-of-concept OCI-compatible runtime for FreeBSD jails.项目地址: https://gitcode.com/gh_mirrors/ru/runj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表