本文描述了如何使用skopeo下载镜像,使用oci-image-tool打包/创建bundle以及使用runc运行容器。参考如何绕过docker运行hello-world,什么是容器的runtime?以及容器镜像规范。环境: Ubuntu 18.04.
skopeo下载镜像
skopeo需要从源码安装,要求Go1.9以上版本。对于Go语言的安装,参考上一篇Golang配置与runc源码build小记。skopeo的使用参考skopeo,这里使用如下命令,从dockerhub上获取busybox与alpine的最新镜像:
skopeo copy docker://busybox:latest oci:busybox
skopeo copy docker://alpine:latest oci:alpine
执行完后会当前目录的busybox和alpine两个文件夹即是下载的镜像。
oci-image-tool解压、创建镜像
oci-image-tool unpack
命令可以将镜像解包为文件系统
可以看到alpine镜像的文件系统eric@ubuntu:~$ oci-image-tool unpack --ref platform.os=linux alpine alpine-fs eric@ubuntu:~$ ls alpine-fs/ bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
oci-image-tool create
可以创建OCI格式的bundle
生成的bundle中包含一个配置文件eric@ubuntu:~$ oci-image-tool create --ref platform.os=linux alpine alpine-bundle eric@ubuntu:~$ ls alpine-bundle/ config.json rootfs
config.json
以及一个根文件系统rootfs
。
命令中的--ref platform.os=linux
尚不了解,可以参考oci-image-tool-create手册, config.json
文件的内容可以参考Configuration。
这里使用上述命令分别创建busybox与alpine的运行时bundle.
eric@ubuntu:~$ oci-image-tool create --ref platform.os=linux busybox busybox-bundle
eric@ubuntu:~$ ls busybox-bundle/
config.json rootfs
eric@ubuntu:~$ oci-image-tool create --ref platform.os=linux alpine alpine-bundle
eric@ubuntu:~$ ls alpine-bundle/
config.json rootfs
runc运行容器
- 使用
sudo apt install runc
命令即可安装 - 安装后,进入到bundle文件夹运行,由于未知原因(版本?)需要改一下
config.json
- 删除原有的
config.json
- 使用
runc spec
创建一个新的config.json
文件 - 修改文件中
uid
与gid
的值,不清楚这一步的原因,可能因为我使用的是编译出的可执行文件
- 删除原有的
- 使用
sudo runc run hello
即可运行容器- 如果不在bundle文件夹中,则需要通过
-b bundle
参数指定文件夹 - hello为容器名称
- 如果不在bundle文件夹中,则需要通过
如下为运行结果:
eric@ubuntu:~/images/alpine-bundle$ sudo ../runc run hello
/ $ ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
内存使用情况
在另一个终端窗口中运行ps -aux
命令可以查看所有进程的内存使用量情况,如下为部分信息,其中VSZ为虚拟内存大小,RSS为常驻集大小。VSZ表示如果一个程序完全驻留在内存的话需要占用多少内存空间,而RSS指明了当前实际占用了多少内存。
- busybox
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 5764 0.0 0.2 64320 4360 pts/0 S+ 16:30 0:00 sudo ./runc run -b busybox-bundle/ hello root 5765 0.0 0.6 717808 13436 pts/0 Sl+ 16:30 0:00 ./runc run -b busybox-bundle/ hello eric 5790 0.0 0.0 1308 4 pts/0 Ss+ 16:30 0:00 sh
- alpine
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6158 0.0 0.2 64320 4236 pts/0 S+ 16:41 0:00 sudo ../runc run -b alpine-bundle/ hello root 6159 0.0 0.6 717808 13460 pts/0 Sl+ 16:41 0:00 ../runc run -b alpine-bundle/ hello eric 6184 0.0 0.0 1628 1096 pts/0 Ss+ 16:41 0:00 sh
来源:https://blog.csdn.net/q15037911903/article/details/102748530