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

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

如何将二进制文件流转化为MockMultipartFile文件

《如何将二进制文件流转化为MockMultipartFile文件》文章主要介绍了如何使用Spring框架中的MockMultipartFile类来模拟文件上传,并处理上传逻辑,包括获取二进制文件流、创... 目录一、名词解释及业务解释1.具体业务流程2.转换对象解释1. MockMultipartFile2

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群