当前位置: 首页 > 工具软件 > Singularity > 使用案例 >

从Docker镜像创建Singularity镜像(SIF文件)

尉迟阳煦
2023-12-01

Singularity可以方便地处理Docker镜像,以下是三种方式:

方式1:从docker uri开始

参考:https://sylabs.io/guides/3.7/user-guide/singularity_and_docker.html#remotely-hosted-images

有以下两个命令可用:

singularity pull docker://godlovedc/lolcow # 下载pre-built image
singularity build mylolcow_latest.sif docker://godlovedc/lolcow # 下载后再build成镜像

方式2:从本地缓存的docker image开始

参考:https://sylabs.io/guides/3.7/user-guide/singularity_and_docker.html#locally-available-images-cached-by-docker

假设本地有godlovedc/lolcow镜像

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
godlovedc/lolcow    latest              577c1fe8e6d8        16 months ago       241MB

那么通过如下命令可从本地docker镜像构建SIF文件:

$ sudo singularity build lolcow_from_docker_cache.sif docker-daemon://godlovedc/lolcow:latest

该命令与方式1的主要区别有:

  1. 从原来的docker变成了docker-daemon;
  2. 这里需要加sudo,因为docker程序运行时需要sudo权限;
  3. docker的镜像后面必须要加TAG标签,可以通过sudo docker images查看TAG标签。

方式3:从镜像tar文件开始

参考:https://sylabs.io/guides/3.7/user-guide/singularity_and_docker.html#locally-available-images-stored-archives

首先需要将docker镜像转成tar文件:

先查看当前的docker镜像

$ sudo docker images
REPOSITORY           TAG              IMAGE ID       CREATED        SIZE  
hello-world          latest           d1165f221234   5 months ago   13.3kB

使用如下命令将hello-world镜像转成tar文件,这里save后面的参数就是IMAGE ID,即上面输出的第三列

$ sudo docker save d1165f221234 -o hello_world.tar

这样当前目录下面就出现了hello_world.tar文件。

接着,将该tar文件转成singularity镜像,命令与输出如下:

$ singularity build hello_world.sif docker-archive://hello_world.tar
INFO:    Starting build...
Getting image source signatures
Copying blob f22b99068db9 done
Copying config 1189c90721 done
Writing manifest to image destination
Storing signatures
2021/08/15 16:46:15  info unpack layer: sha256:a99912efe9c767b280c869d2e734bef3c92d29d45d4e3beefbeb5a1924ed7445
INFO:    Creating SIF file...
INFO:    Build complete: hello_world.sif

该命令与方式1的主要区别有:

  1. 原本的docker://换成了docker-archive://,方式2里面是docker-daemon://;
  2. 这里不需要加sudo了,只需要当前用户有hello_world.tar文件的可访问权限即可;
  3. 这里用的是tar文件,singularity也可以处理tar.gz文件。
 类似资料: