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

2024-03-12 23:12

本文主要是介绍Singularity(三)| 将docker转化为singularity容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

Singularity 容器格式

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

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

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

构建 Singularity 容器的主要方式是通过 build 指令从外部资源(如 Container Library 和 Docker 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 多平台发布

这篇关于Singularity(三)| 将docker转化为singularity容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802887

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解