使用runc與oci-image-tool運行容器


本文描述瞭如何使用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 命令可以將鏡像解包爲文件系統
    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                              
    
    可以看到alpine鏡像的文件系統
  • oci-image-tool create 可以創建OCI格式的bundle
    eric@ubuntu:~$ oci-image-tool create --ref platform.os=linux alpine alpine-bundle
    eric@ubuntu:~$ ls alpine-bundle/                                                                                        
    config.json  rootfs 
    
    生成的bundle中包含一個配置文件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文件
    • 修改文件中uidgid的值,不清楚這一步的原因,可能因爲我使用的是編譯出的可執行文件
  • 使用sudo runc run hello即可運行容器
    • 如果不在bundle文件夾中,則需要通過-b bundle參數指定文件夾
    • hello爲容器名稱

如下爲運行結果:

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
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章