OCI制作

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包(甚至容器运行时)规范的一部分。

图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包在容器中运行起来。

图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相关系统调用创建和运行容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值