Singularity入門之持久化Overlay

介紹

在 Singularity 中運行容器,當容器退出時,對容器做的修改均會丟失,那怎麼保存對容器的修改呢?此時我們可以通過 Singularity 的 Overlay 實現。

Singularity 的 Overlay 其實就是一個目錄或文件系統鏡像,其中保存着對基於基礎鏡像的修改,可以使用 --overlay 選項來使用,且應用在下面幾個容器命令上:

  • run
  • exec
  • shell
  • instance.start

使用

首先,先獲取一個基礎鏡像,比如:centos,獲取後會下載一個 centos.sif 文件。

$ singularity pull centos

創建一個目錄作爲 Overlay 目錄。

$ mkdir my_overlay

然後使用 --overlay 選項運行容器,由於安全原因,使用 --overlay 必須要具有 root 權限,所以可以使用 sudo 來運行。

$ sudo singularity shell --overlay my_overlay centos.sif

# 先在容器裏檢查是否有zip工具,默認容器會找不到命令。
Singularity centos.sif:/home/data/singularity-study> zip
bash: zip: command not found

# 安裝一下zip包
Singularity centos.sif:/home/data/singularity-study> yum install -y zip
...

# 安裝完檢查一下zip工具安裝路徑
Singularity centos.sif:/home/data/singularity-study> whereis zip
zip: /usr/bin/zip

然後退出容器,並使用下面命令再次運行容器,就會發現剛纔安裝的工具已經在容器中了。

$ sudo singularity shell --overlay my_overlay centos.sif

# 然後直接檢查zip工具安裝路徑
Singularity centos.sif:/home/data/singularity-study> whereis zip
zip: /usr/bin/zip

如果我們使用下面的命令運行容器,就不會使用我們上面創建的 Overlay。

$ sudo singularity shell centos.sif

# 容器會找不到zip命令
Singularity centos.sif:/home/data/singularity-study> zip
bash: zip: command not found

最後說一下,對於使用 Overlay 的持久化的容器,我們無法根據 Overlay 目錄來創建鏡像。比如:如果我使用下面的命令來創建鏡像

$ sudo singularity build my_overlay.sif my_overlay
INFO:    Starting build...
INFO:    Creating SIF file...
INFO:    Build complete: my_overlay.sif

創建鏡像後,我們使用此鏡像來創建容器,此時會提示運行報錯。

$ singularity shell my_overlay.sif
WARNING: passwd file doesn't exist in container, not updating
WARNING: group file doesn't exist in container, not updating
FATAL:   exec /.singularity.d/actions/shell failed: no such file or directory
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章