本文描述瞭如何使用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