OCI制作
  OYW7QzeapYog 2023年12月06日 23 0


1.制作OCI包并运行容器

容器镜像本质上就是一个根文件系统镜像。但容器镜像又不仅仅是一个根文件系统镜像,容器镜像有一个OCI标准规范,而runc命令用于运行根据OCI规范打包的应用程序,也就是说,runc命令是OCI规范的兼容实现。

OCI容器镜像是堆叠起来的根文件系统和config.json配置文件的捆绑(bundle),如图11-5所示。runc 命令符合OCI规范(具体来说,是runtime-spec),这意味着runc命令可以使用OCI镜像创建并运行一个容器。值得一提的是,创建并运行一个容器并不需要知道根文件系统是一个单层的普通文件系统,还是一个堆叠起来的根文件系统,因为不管是单层还是多层都会合并为一个容器层(container layer)根文件系统。换句话说,OCI包只是根文件系统和config.json配置文件的捆绑。层、标签、容器注册表和存储库等功能都不是OCI包(甚至容器运行时)规范的一部分。

OCI制作_ci


图11-5 OCI容器镜像构成示意图

有一个单独的OCI-spec(image-spec)定义OCI镜像(OCI image)。OCI镜像是一种堆叠起来的文件系统,多层文件目录合并起来形成所需的根文件系统,多个层之间有依赖关系,这种依赖关系称为父子关系,被依赖的层为父层(parent)。底层文件系统往往都是只读的,容器在运行过程中系统只能修改最上层的可读写文件系统。

具体来说,从一个比较高层次的角度来看这个OCI镜像规范,一个镜像由4部分组成—— Manifest、Image Index(可选)、Layers、Configuration。Manifest包括镜像内容的元信息和镜像层(Layers)的摘要信息,这些镜像层可以解包部署成最后的运行环境。Image Index则从更高的角度描述了Manifest,主要应用于镜像跨平台。Configuration则包含了应用的参数环境。这些OCI镜像规范的主要目的是统一各种容器工具的镜像格式,让标准镜像能够在多种容器软件下使用。篇幅所限,这里不详述OCI镜像规范的细节。

OCI镜像、OCI包和OCI容器运行时如图11-6所示,OCI镜像可以解包(unpack)成OCI包,OCI容器运行时工具(比如runc)可以将OCI包在容器中运行起来。

OCI制作_OCI_02


图11-6 OCI镜像、OCI包和OCI容器运行时

制作OCI镜像的方法在11.4节介绍,这里仅给出一个简便的制作OCI包并运行容器的做法,提供如下命令仅供参考。

$ sudo apt install docker.io # 可以通过安装docker获得runc命令
$ mkdir oci-bundle
$ cd oci-bundle
~/oci-bundle $ wget https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-minirootfs-3.15.1-x86_64.tar.gz
~/oci-bundle $ mkdir rootfs
~/oci-bundle $ cd rootfs
~/oci-bundle/rootfs$ tar -zxvf ../alpine-minirootfs-3.15.1-x86_64.tar.gz
~/oci-bundle/rootfs$ ls
bin  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
~/oci-bundle/rootfs$ cd ..
~/oci-bundle $ runc spec # 生成一个config.json文件
~/oci-bundle $ ls
alpine-minirootfs-3.15.1-x86_64.tar.gz  config.json  rootfs
~/oci-bundle $ sudo runc run test
/ # ls
bin  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

借助runc spec命令生成config.json文件,从而将一个rootfs根文件系统做成OCI包,这时通过sudo runc run test命令运行一个容器。
runc符合OCI规范,可以生成OCI包,并可以通过调用namespace相关系统调用创建和运行容器。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: chroot 下一篇: Python行对齐工具difflib
  1. 分享:
最后一次编辑于 2023年12月06日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   28   0   0 i++iosi++ioscici
  anLrwkgbyYZS   2023年12月30日   32   0   0 ideciciMaxideMax
OYW7QzeapYog