Singularity入門之持久化Overlay

  • 2019 年 10 月 7 日
  • 筆記

介紹

在 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

Tags: