Singularity(五)| 容器挂载和环境

Singularity(五)| 容器挂载和环境

我们可以按照如下方式运行 Singularity 容器:

singularity shell samtools
singularity exec samtools samtools help
singularity run samtools
singularity exec instance://samtools

在我们逐个详解容器运行规则之前,我们需要首先为大家介绍一下容器的挂载

前面我们在容器简介中提到,开发容器的目的之一主要是为了解决依赖库的安装、软件环境的隔离以及软件环境的移植问题。因此,容器的核心特性之一就是它们的文件系统与宿主机相隔离。如果我们查看一个 singularity 容器的根目录,也会看到与 Linux 主机根目录相似的结构。这意味着容器内的应用程序只能看到(并与之交互)这个封闭环境中的文件和目录。

与 Linux 下挂载(mount)外置硬盘设备类似,容器同样需要通过挂载 (bind) 的操作与我们宿主机上的文件系统交互。

绑定路径和挂载

当调用容器时,Singularity 会将主机操作系统 “swap” 为容器中的操作系统,从而导致我们无法访问主机文件系统。然而,在日常使用场景中,已安装至容器中的应用程序的输入和输出文件往往存储在主机文件系统中,因此,我们需要从容器内读取和写入主机系统上的文件。

singularity 使用 --bind/-B 宿主机目录:容器内目录 选项将主机系统上的目录映射到容器内的目录。这允许我们从容器内部访问主机上的文件,从而在主机系统上读写数据。

系统默认的绑定路径

系统管理员可以定义在每个容器中自动包含哪些绑定路径。有些绑定路径是自动生成的(例如用户的家目录),有些是静态定义的(例如 Singularity 配置文件中的绑定路径)。默认配置下,系统默认绑定路径为:$HOME/sys:/sys/proc:/proc/tmp:/tmp/var/tmp:/var/tmp/etc/resolv.conf:/etc/resolv.conf/etc/passwd:/etc/passwd$PWD: 前面的第一个路径为来自主机的路径,第二个路径为容器内的路径,例如:

$ echo "Hello from inside the container" > $HOME/hostfile.txt
$ singularity exec lolcow_latest.sif cat $HOME/hostfile.txt
Hello from inside the container

这个示例之所以有效,是因为 hostfile.txt 存在于当前用户的主目录中。默认情况下,Singularity --bind 在运行时会将 /home/$USER/tmp$PWD 挂载到容器中。

用户自定义的绑定路径

singularity 操作指令(runexecshellinstance start)通过 --bind/-B 命令行选项来指定绑定路径,并且还支持 $SINGULARITY_BIND (或 $SINGULARITY_BINDPATH)环境变量。该选项的参数是一个逗号分隔的绑定路径规范字符串,格式为:out1:in1,out2:in2,out3outin 分别为容器外部和内部路径,如果未给出内部路径,则将内部路径设置为完全相同的外部路径。外部路径必须是已创建的,而容器中的内部路径可以是虚假的注:当与 --writable 选项连用时,被绑定的容器内部路径最好是已经存在的。我们可以多次指定 --bind/-B 选项,也可以使用逗号分隔多个绑定路径。

$ ls /data
bar  foo
$ singularity exec --bind /data:/mnt,/test:/test,/app my_container.sif ls /mnt
bar  foo

我们也可以使用环境变量而非命令行参数指定绑定路径:

$ export SINGULARITY_BIND="/opt,/data:/mnt"
$ singularity shell my_container.sif

如需要将多个目录绑定到 Singularity 容器中,并且长期保持不变,我们可以进一步将这个变量写入 .bashrc 文件中。

singularity环境变量

-C, --containall

使用容器技术时,--containall 参数可用于隔离进程ID(PID)、进程间通信(IPC)和环境变量。这提供了一个更加全面的隔离级别,确保容器内的应用与宿主系统之间的隔离,从而增强了安全性和一致性。具体来说:

  1. PID(进程ID)隔离:确保容器内的进程只能看到容器内部的其他进程。这意味着容器内的进程和宿主机系统的进程是完全隔离的,容器内的PID命名空间与宿主机的PID命名空间分离。

  2. IPC(进程间通信)隔离:防止容器内的进程与宿主机或其他容器的进程之间的未授权IPC通信。IPC隔离确保了消息队列、信号量和共享内存等IPC资源在容器内部是封闭的,不会与宿主机或其他容器共享。

  3. 环境变量隔离:通过隔离环境变量,可以防止容器内的应用程序访问或修改宿主机上的环境变量,这有助于保护敏感信息并确保容器内应用的运行环境独立于宿主机环境。

我们可以搭配 slurm HPC 管理系统调用容器:

srun -p P1 -c 1 singularity exec /prog1/Container/ACGT101_5R/qiime-1.8.0.sif 、
 /usr/local/bin/alpha_diversity.py \
 -i Species_table_even14870.biom \
 -m observed_species,shannon,simpson,chao1,goods_coverage \
 -o alpha_diversity.txt

此时我们可能会遇到以下错误信息:

[node03:35656] OPAL ERROR: Not initialized in file pmix2x_client.c at line 109
--------------------------------------------------------------------------
The application appears to have been direct launched using "srun",
but OMPI was not built with SLURM's PMI support and therefore cannot
execute. There are several options for building PMI support under
SLURM, depending upon the SLURM version you are using:

  version 16.05 or later: you can use SLURM'
s PMIx support. This
  requires that you configure and build SLURM --with-pmix.

  Versions earlier than 16.05: you must use either SLURM's PMI-1 or
  PMI-2 support. SLURM builds PMI-1 by default, or you can manually
  install PMI-2. You must then build Open MPI using --with-pmi pointing
  to the SLURM PMI library location.

Please configure as appropriate and try again.
--------------------------------------------------------------------------
*** An error occurred in MPI_Init_thread
*** on a NULL communicator
*** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
***    and potentially your MPI job)
[node03:35656] Local abort before MPI_INIT completed completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!

错误原因:在 singularity 搭配集群 SLURM 使用时出现。

解决方法:在调用 singularity 时加上 -C 参数隔离环境变量。

清理singularity

前面我们提到,singularity 使用标准的 Linux 文件系统来存储容器,因此,对于 sandbox 和 sif 格式的容器,我们直接使用 rm 指令删除即可。

此外,我们可以通过 cache 管理本地 singularity 缓存

$ singularity cache list [list options...]
There are 2 container file(s) using 51.16 MiB and 20 oci blob file(s) using 3.14 GiB of space
Total space used: 3.19 GiB
  • -T, --type strings

    要显示的缓存类型列表:library, oci, shub, blob(s), all (default [all])

$ singularity cache clean [clean options...]
  • -T, --type strings

    要清理的缓存类型列表 (ibrary, oci, shub, blob, net, oras, all) (default [all])

  • -D, --days int

    删除所有超过指定天数的缓存项

扫码关注微信公众号【生信F3】获取文章完整内容,分享生物信息学最新知识。 ShengXinF3_QRcode

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274433.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3全家桶 - VueRouter - 【2】重定向路由

重定向路由 在路由规则数组中,可采用 redirect 来重定向到另一个地址: 通常是将 / 重定向到 某个页面; 示例展示: router/index.js:import { createRouter, createWebHashHistory, createWebHistory } from vue-route…

Python安装第三方库

前言:大部分时候我们都是使用pip install去安装一些第三方库,但是偶尔也会有部分库无法安装(最典型的就是dlib这个库),需要采取别的方法解决,这里做笔记记录一下。 使用国内镜像源安装 因为pypi的服务器在…

最简k8s部署(AWS Load Balancer Controller使用)

问题 我需要在k8s集群里面部署springboot服务,通过k8s ingress访问集群内部的springboot服务,应该怎么做? 这里假设已经准备好k8s集群,而且也准备好springboot服务的运行镜像了。这里我们将精力放在k8s服务编排上面。 一图胜千言…

基于SpringBoot的“医院信管系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“医院信管系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 功能结构图 系统首页界面图 用户注册界面图 医生…

es 查询案例分析

场景描述: 有这样一种场景,比如我们想搜索 title:Brown fox body:Brown fox 文章索引中有两条数据,兔子和狐狸两条数据 PUT /blogs/_bulk {"index": {"_id": 1}} {"title": "…

【鸿蒙 HarmonyOS 4.0】常用组件:List/Grid/Tabs

一、背景 列表页面:List组件和Grid组件; 页签切换:Tabs组件; 二、列表页面 在我们常用的手机应用中,经常会见到一些数据列表,如设置页面、通讯录、商品列表等。下图中两个页面都包含列表,“…

JVM知识整体学习

前言:本篇没有任何建设性的想法,只是我很早之前在学JVM时记录的笔记,只是想从个人网站迁移过来。文章其实就是对《深入理解JVM虚拟机》的提炼,纯基础知识,网上一搜一大堆。 一、知识点脑图 本文只谈论HotSpots虚拟机。…

如何使用US Domain Center和WordPress搭建非营利组织网站的详细指南

在今天的数字化时代,拥有一个专业、易于管理和更新的网站对于非营利组织(例如慈善机构、NGO等)至关重要。WordPress是一个功能强大且易于使用的网站构建平台,而美国域名中心 US Domain Center:US Domain Center 则是一…

软考71-上午题-【面向对象技术2-UML】-UML中的图2

一、用例图 上午题,考的少;下午题,考的多。 1-1、用例图的定义 用例图展现了一组用例、参与者以及它们之间的关系。 用例图用于对系统的静态用例图进行建模。 可以用下列两种方式来使用用例图: 1、对系统的语境建模&#xff1b…

LED显示屏的刷新频率及灰度等级

LED显示屏随着其在室内各种场所的广泛应用,无论是在指挥中心、监控中心还是演播厅中,都得到了越来越多的关注。然而,就LED显示屏系统的整体表现而言,这些显示屏能否满足用户的需求?显示的影像是否符合人眼的观赏要求&a…

2007-2021年中国省级知识产权保护指数数据

2007-2021年中国省级知识产权保护指数数据 1、时间:2007-2021年 2、范围:31省市 3、指标::年份、省份、IPP(知识产权保护指数) 4、来源:全国知识产权发展状况报告 5、指标解释:…

mysql中insert … select锁范围

1、执行 insert … select 的时候,对目标表也不是锁全表,而是只锁住需要访问的资源。 例如, CREATE TABLE t (id int(11) NOT NULL AUTO_INCREMENT,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY c (c) ) EN…

【java数据结构】HashMap和HashSet

目录 一.认识哈希表: 1.1什么是哈希表? 1.2哈希表的表示: 1.3常见哈希函数: 二.认识HashMap和HashSet: 2.1关于Map.Entry的说明:,> 2.2Map常用方法说明: 2.3HashMap的使用案例: 2.4Set常见方法…

代理IP如何应对自动化测试和爬虫检测

目录 一、代理IP在自动化测试和爬虫中的作用 二、代理IP的优缺点分析 1.优点 2.缺点 三、应对自动化测试和爬虫检测的策略 1.选择合适的代理IP 2.设置合理的请求频率和间隔 3.模拟人类行为模式 4.结合其他技术手段 四、案例与代码示例 五、总结 在自动化测试和爬虫开…

LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。 loadbalancer本地负载均衡,在调用微服务接口时候&a…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…

快速了解Redis

Redis是什么? Redis是一个数据库,是一个跨平台的非关系型数据库,Redis完全开源,遵守BSD协议。它通过键值对(Key-Value)的形式存储数据。 与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库&am…

布隆过滤器(做筛选器索引)

什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是…

GIS学习笔记(四):GIS数据可视化综合(矢量数据)

矢量数据 arcgis的主要可视化工具:属性 符号系统 符号系统 按类别 这里不会涉及到数字的大小因素,只是按照字符的分类去做可视化 “唯一值”的含义 “建筑年代”字段共有10个年份,一个年份也许有多个数据( eg.1990年的建筑有20个)&…

qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码

理解字符编码,请参考:unicode ucs2 utf16 utf8 ansi GBK GB2312 CSDN博客 汉字(或者说多字节字符)的存放需求,是计算机中各种编码问题的最直接原因。如果程序不直接使用汉字,或间接在所有操作步骤中统一使…