Singularity(三)| 将docker转化为singularity容器

Singularity(三)| 将docker转化为singularity容器

Singularity 容器格式

Singularity 容器存在两种不同的格式(或者称为状态):

  • 适用于生产的压缩的 只读 singularity 镜像文件(Singularity Image File,SIF)格式
  • 用于交互式开发的 可写根目录,称为沙盒(sandbox)(以 --sandbox 选项生成)

sif 格式确保了镜像的可再现性和可验证性。然而,在测试和调试期间,我们一般会需要一个可改写的沙箱(sandbox)格式(实际上就是一个目录)。

构建 Singularity 容器的主要方式是通过 build 指令从外部资源(如 Container LibraryDocker Hub)下载或在本地组装现有的容器。

build 指令接受一个以下目标(分别对应不同的需求、来源和应用场景)作为输入,产生一个容器作为输出:

  1. 来源于容器库(Container Library)以 library:// 开头的 URL 链接

    singularity build --sandbox lolcow/ library://sylabs-jms/testing/lolcow
  2. 来源于 Docker Hub 以 docker:// 开头的 URL 链接

    singularity build lolcow docker://godlovedc/lolcow
  3. 来源于 Singularity Hub 以 shub:// 开头的 URL 链接

    singularity build mycontainer.sif shub://singularityhub/ubuntu
  4. 本地现存的容器路径

  5. 沙盒(sandbox)目录路径

  6. Singularity 容器定义文件

我们也可以使用 pull 指令从以上三种公共容器仓库中直接下载容器到本地,下载的容器默认以 sif 镜像的形式存在,例如:

singularity pull library://sylabsed/linux/alpine
singularity pull docker://godlovedc/lolcow

Singularity 可以与 Docker 镜像一起使用。之所以包含这个特性,是因为开发人员非常喜欢使用 Docker,且已经投入了大量资源来创建 Docker 镜像。因此,Singularity 早期的开发目标之一就是支持 Docker,其满足以下条件:

  • 不需要安装 Docker

  • 可以 shell 进入一个 Singularity 化的 Docker 镜像

  • 可以立即将 Docker 镜像作为 Singularity 镜像运行

  • 可以直接 pull 一个 Docker 镜像(不需要 sudo

  • 可以使用装配好的 Docker 层(包括环境、内核和标签)构建镜像

将 Docker 镜像转化为 Singularity 镜像的方式主要有以下两种:

3.1 使用本地现有的 Docker 镜像

  1. 查找 Docker 镜像 ID

    在运行 Docker 的主机上,使用命令 docker images 查找存储在本地注册表中的 Docker 镜像的镜像 ID (通常是 /var/lib/docker):

    $ docker images
    REPOSITORY                       TAG                IMAGE ID       CREATED        SIZE
    quay.io/biocontainers/samtools   1.17--hd87286a_1   c6ab05d10f7f   6 weeks ago    66.7MB
    hello-world                      latest             9c7a54a9a43c   2 months ago   13.3kB
  2. 创建 Docker 镜像的 tarball 文件

    对于想移植到其它主机上的 Docker 镜像,例如,biobakery/lefse,镜像ID为 c6ab05d10f7f,使用 docker save 命令创建一个 tarball:

    docker save c6ab05d10f7f -o samtools.tar
  3. 把 tarball 拷贝到运行容器的 Linux 主机上

    使用 scp 拷贝,例如:

    scp -P 22 -r samtools.tar user@111.1.111.11:/home/user
  4. 将 tarball 转换为 Singularity 镜像

    如果 tarball 在当前工作目录中,执行:

    singularity build --sandbox samtools docker-archive://samtools.tar

    如果 tarball 文件不在当前工作目录中,需指定路径,例如 /tmp:

    singularity build --sandbox samtools docker-archive:///tmp/samtools.tar

    注意:在该例中,samtools 是 Singularity 镜像的目录名。

  5. 运行 Singularity 沙箱镜像,例如:

    singularity shell samtools
    singularity exec samtools samtools help
    singularity run samtools

3.2 使用 Docker 容器仓库中收录的镜像

如果准备使用的 Docker 镜像已经上传到 Docker Hub (https://hub.docker.com/) 或 Quay (https://quay.io/) 等 Docker 托管存储库中,我们可以直接下载并将其转化为 Docker 容器。例如,镜像 godlovedc/lolcow 存在于 Docker Hub 中,samtools 镜像存储在 Quay 中:

singularity build samtools.sif docker://quay.io/biocontainers/samtools:1.17--hd87286a_1
singularity build --sandbox lolcow docker://godlovedc/lolcow

3.3 使用 Dockerfiles

从 4.1 版本开始,SingularityCE 可以直接从 Dockerfiles(与后面介绍的singulariyt Definition File 类似)中构建 OCI-SIF 映像,创建可以使用 SingularityCE 的 OCI 模式(Open Container Initiative(OCI)是一个为规范容器格式和运行时环境创建的开放行业标准)运行的映像。

$ cat ./Dockerfile
FROM debian
CMD cat /etc/os-release

$
 singularity build --oci ./debian.oci.sif ./Dockerfile

$
 singularity run --oci ./debian.oci.sif
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

当然,我们也可以先通过 Dockerfiles 构建 docker 容器,再将 docker 容器转换为 singularity。

本文由 mdnice 多平台发布

相关推荐

  1. Singularity)| docker转化singularity容器

    2024-03-13 07:34:06       46 阅读
  2. proto的singular解释

    2024-03-13 07:34:06       41 阅读
  3. Lombok-@Singular 和 @Builder 组合

    2024-03-13 07:34:06       40 阅读
  4. docker容器内,django项目数据库改postgresql

    2024-03-13 07:34:06       55 阅读
  5. singularity-ce-4.1.0 + go 完整安装步骤,及报错解决

    2024-03-13 07:34:06       47 阅读
  6. [Flutter]导入singular_flutter_sdk后运行到Android报错

    2024-03-13 07:34:06       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 07:34:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 07:34:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 07:34:06       82 阅读
  4. Python语言-面向对象

    2024-03-13 07:34:06       91 阅读

热门阅读

  1. 软件工程---原型评价

    2024-03-13 07:34:06       39 阅读
  2. iOS 17.4报错: libopencore-amrnb.a[arm64]

    2024-03-13 07:34:06       44 阅读
  3. 人工智能领域从原理详细总结chatgpt的prompt方法

    2024-03-13 07:34:06       45 阅读
  4. html5&css&js代码 013 常见布局

    2024-03-13 07:34:06       43 阅读
  5. 使用docker搭建chromium

    2024-03-13 07:34:06       45 阅读
  6. linux系统docker容器编写dockerfile文件

    2024-03-13 07:34:06       46 阅读
  7. JVM相关

    2024-03-13 07:34:06       40 阅读
  8. flink状态后端和检查点的关系

    2024-03-13 07:34:06       49 阅读
  9. 【嵌入式DIY实例】-DIY锂电池电压检测表

    2024-03-13 07:34:06       45 阅读
  10. 字节一面:TCP 和 UDP 可以使用同一个端口吗?

    2024-03-13 07:34:06       39 阅读