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

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

docker-compose安装和简单使用

本文介绍docker-compose的安装和使用 新版docker已经默认安装了docker-compose 可以使用docker-compose -v 查看docker-compose版本 如果没有的话可以使用以下命令直接安装 sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-c

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4