Singularity实践教程 + Docker 转 Singularity 的避坑指南

  背景:因研究需要,复现某论文,使用的是某校的服务器集群。他们服务器使用的容器是Singularity,而之前自己在院里用的时docker。docker学了没多久,就开始Singularity。恰恰是会一点docker,所以在转用singularity的过程中,踩的坑比较多(造孽啊)。记录一下,前事不忘,后世之师。

目录

一、 容器简介:

1、容器

2、singularity的重要概念

3、singularity 和docker 的区别:

二、获取镜像

1、搜索镜像文件

2、获取镜像文件

3、 定制镜像文件

三、Singularity容器命令

1、镜像文件操作

2、sandbox 操作 

3、创建、删除容器实例:


一、 容器简介:

1、容器

  容器是一种Linux上广为采用的应用封装技术,它将可执行程序与依赖库打包成一个镜像文件,启动时与宿主节点共享操作系统内核。 由于镜像文件同时携带可执行文件和依赖库,避免了两者不匹配造成的兼容性问题,还能在一个宿主Linux操作系统上支持多种不同的Linux发行版,譬如在CentOS发行版上运行Ubuntu的 apt-get 命令。

2、singularity的重要概念

(1)容器(container): 容器是一个包含用户软件和依赖的镜像系统,可独立运行某一条或者多条命令。Singularity没有镜像的概念,用户创建和运行的都是一个一个容器。

(2)SIF(Singularity Image File):压缩后的只读(read-only)的Singularity镜像文件,是生产使用的主要形式。

(3)Sandbox :可写(writable)的容器存在形式,是文件系统中的一个目录,常用于开发或者创建自己的容器,是开发使用的主要形式。

3、singularity 和docker 的区别:

  (1)基于 Singularity 的高性能计算容器技术,相比Docker等在云计算环境中使用的容器技术,Singularity 同时支持root用户和非root用户启动,且容器启动前后,用户上下文保持不变,这使得用户权限在容器内部和外部都是相同的。

 (2)Singularity与Docker的一个很大区别是生产环境使用的Singulariy容器是只读的SIF格式文件.

 (3)Singularity 强调容器服务的便捷性、可移植性和可扩展性,而弱化了容器进程的高度隔离性,因此量级更轻,内核namespace更少,性能损失更小。

docker相关实践参考:

Docker 实践指南——下载、配置及应用等常见命令_此何人哉tan的博客-CSDN博客_docker下载文件命令

Docker实践指南(二)之 配置anaconda+远程jupyter notebook容器_此何人哉tan的博客-CSDN博客_anaconda 容器

二、获取镜像

1、搜索镜像文件

singularity search alp # 搜索镜像

2、获取镜像文件

# From Sylabs cloud library
singularity pull alpine.sif library://alpine:latest

# From Docker
singularity pull tensorflow.sif docker://tensorflow/tensorflow:latest

# From Shub
singularity pull singularity-images.sif shub://vsoch/singularity-images

# From supporting OCI registry (e.g. Azure Container Registry)
singularity pull image.sif oras://<username>.azurecr.io/namespace/image:tag

3、 定制镜像文件

singularity build --sandbox /tmp/debian docker://debian:latest
singularity exec --writable /tmp/debian apt-get install python
singularity build /tmp/debian2.sif /tmp/debian

三、Singularity容器命令

主要命令就是三个,容易混淆的地方对于 只读的.sif镜像文件,sandbox形式容器和一般容器实例的应用有所不同。

singularity shell
singularity exec
singularity run 

1、镜像文件操作

一般我们得到的是.sif文件,这是只读的singularity镜像文件。我们可以直接对这个镜像文件.sif进行操作。如运行镜像文件中的命令(singularity exec/run),进入镜像文件(singularity shell)。进入镜像文件,不能对文件进行读写。比如安装软件、更新软件的操作都是不行的。

(1)singularity exec 运行cat命令

(2)singularity shell 进入镜像文件

 (3)singularity run 与singularity exec 不同之处在于,(官方给的,我也不是太清楚,试了一下。singularity run xxx.sif 能进入镜像文件,而singularity exec xxx.sif 不能。其它的好像一样输出)

# Here we see that the runscript prints "Hello world: "
singularity exec /tmp/debian.sif cat /singularity
  #!/bin/sh
  echo "Hello world: "

# It runs with our inputs when we run the image
singularity run /tmp/debian.sif one two three
  Hello world: one two three

# Note that this does the same thing
./tmp/debian.sif one two three

2、sandbox 操作 

  这是singularity 容器开发的主要操作,也是踩坑比较多的地方。一般情况下,我们从一个.sif镜像文件或者各种库的某个镜像,build一个sandbox形式容器(可指定目录)如:

# 从docker 镜像库中build
singularity build --sandbox /tmp/debian_v1 docker://debian:latest
# tmp/下有一个debian_v1目录, 里面是具体镜像文件

# 从xxx.sif镜像文件中build
singularity build --sandbox /tmp/debian_v2  /tmp/debian.sif  
# tmp/下有一个debian_v2目录, 里面是具体镜像文件。

  之后就可以用命令:singularity shell -w(-w == --writable,可写),进入sandbox形式容器,中定制自己的镜像文件。如安装某个软件、修改配置文件,搭建自己的pipeline。

singularity shell -w xxx_sandbox/ # 进入容器,并操作

但是涉及到root权限可能需要用到fakeroot。

singularity shell -w  -f xxx_sandbox/ # 进入容器,并操作

而fakeroot,需要用户命令空间,用户命名空间如果一开始没有的话,需要宿主机sudo权限才能创建。如CentOS需要运行:

sudo sh -c 'echo user.max_user_namespaces=15000 \
    >/etc/sysctl.d/90-max_net_namespaces.conf'
sudo sysctl -p /etc/sysctl.d /etc/sysctl.d/90-max_net_namespaces.conf

具体可以参考:

Singularity 啟用 Fakeroot - Yi Yang's Blog User Namespaces & Fakeroot — Singularity Admin Guide 3.6 documentation

3、创建、删除容器实例:

我们可以在.sif镜像文件基础上,创建一个容器(singularity instance start),运行容器(singularity run),进入容器(singularity shell),停止容器(singularity instance stop)。

singularity instance start /tmp/my-sql.sif mysql


singularity shell instance://mysql
Singularity my-sql.sif> pwd



singularity instance stop /tmp/my-sql.sif mysql
Stopping /tmp/my-sql.sif mysql

参考:

1 Singularity入门之通过沙盒创建镜像_kongxx的博客-CSDN博客

2 singularity基本用法_HackerTom的博客-CSDN博客_singularity使用

Singularity:配置fakeroot - 知乎

Singularity 日常使用指南 · XTAO Achelous

5 singularity安装与使用,安装需要root - 简书

6 容器引擎 - Singularity 使用说明 - 知乎

singularity build — Singularity container 3.6 documentation 

8、容器 — 上海交大超算平台用户手册 文档 

9、SingularityCE User Guide — SingularityCE User Guide 3.10 documentation 

国科大超算平台上的Singularity容器是一种用于软件打包和部署的工具。通过使用Singularity容器,用户可以在不同的操作系统环境中运行其软件,而无需担心与主机系统不兼容的问题。 在国科大超算平台上,使用Singularity容器可以提供以下好处: 首先,Singularity容器可以使软件的部署更加简便和灵活。用户只需将其软件及其相关依赖项打包进Singularity容器中,就可以在超算平台上运行,而无需额外的配置和安装。这种打包的方式可以大大简化软件部署流程,节省用户的时间和精力。 其次,Singularity容器具有良好的可移植性。一旦在国科大超算平台上成功使用Singularity容器运行软件,用户可以将该容器轻松地迁移至其他系统或平台中,而不会受限于特定的操作系统环境。这样,用户可以更加方便地分享和传播其软件,同时也能够在各种不同的计算环境中使用。 此外,Singularity容器还具有较好的安全性。由于Singularity容器是基于用户空间隔离技术实现的,因此容器之间的进程是相互隔离的,不会相互干扰或共享资源。这样可以有效地防止恶意软件或未经授权的访问,保护用户的数据和计算环境的安全。 总的来说,国科大超算平台中采用Singularity容器实践能够提供更加便捷、灵活、可移植和安全的软件运行环境,为用户的科学计算工作提供了有力的支持。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值