当前位置: 首页 > news >正文

Singularity容器安装与使用

Singularity容器技术

docker的缺点:

资源限制问题:Slurm利用cgroups实现资源分配,Docker通过ocker daemon无法实现。

权限问题:Docker daemon使用 root用户启动,HPC场录期望使用普通用户运行容器。
singuiarily主要是适合HPC中的普通用户,因其完全兼容docker,并且具有很好权限隔离,非常适合普通用户使用。docker因大多时候需变管理员的权眼,且普通用户进行数据卷的挂载时,容易导致其他不可访问的日录也被容器内访问,安全性较差。因此对于HPC的普通用户,建议使用singularity运行容器。

1、Singularity安装
step1:安装基础依赖包

apt-get install -y build-essential libssl-dev glib-2.0 libglib2.0-dev libfuse3-dev libfuse-dev uuid-dev libgpgme11-dev squashfs-tools libseccomp-dev wget pkg-config git cryptsetup

step2:安装go

export VERSION=1.20.4 OS=linux ARCH=amd64                        # 设置具体的环境变量
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz      # 下载GO的安装包
tar -C /opt/software -xzvf go$VERSION.$OS-$ARCH.tar.gz    # 解压GO文件
rm go$VERSION.$OS-$ARCH.tar.gz                                 # 删除安装包
export PATH=/opt/software/go/bin:$PATH							#设置GO语言环境变量

step3:下载singularity源码包

export VERSION=3.11.3                   # 设置版本
wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-ce-${VERSION}.tar.gz  # 下载源码包
tar -xzf singularity-ce-${VERSION}.tar.gz 
cd singularity

step4:编译源码包:

./mconfig --prefix=/opt/software/singularityCE-3.11.3
make -C builddir
make -C builddir install

step5:配置modulefle

cd /opt/software/modules/modulefiles
mkdir -p singularity
touch singularity/3.11.3
#%Module1.0proc ModulesHelp {} {global version modrootputs stdout "\t loads singularity 3.11.3\n"
}module-whatis   "Singularity 3.11.3"set VERSION 3.11.3
set SINGULARITY_DIR /opt/software/singularityCE-3.11.3prepend-path    PATH               ${SINGULARITY_DIR}/binif [ module-info mode load ] {system echo "singularity 3.11.3 is loaded"
}
if [ module-info mode switch2 ] {system echo "singularity 3.11.3 is loaded"
}
if [ module-info mode remove ] {system echo "singularity 3.11.3 is unloaded"
}

2、singularty镜像相关命令
官方镜像仓库:hps:/icloud.sylabs,.iomibray,但由于官方仓库镜像较少,一般都是使用docker镜像仓库中的镜像。
Singularity 镜像文件(Singularity lmage File,sif)是一种内容只读的文件格式,其文件内容不能被修改

#搜索镜像
singularity search ubuntu  #从官方仓库搜索镜像,注意Ubantu和centos 镜像无法获取,search限制
singularity search mysql
#下载镜像
singularity build ubuntu.sif library://ubuntu #从官方仓库下载并转化成sif格式
singularity build ubuntu.sif docker://ubuntu:18.04 #从docker仓库中下载并转化为isf格式
# 下载编译好的镜像
singularity pull centos #获取编译好的镜像,完成后会在本地生成目录文件<image-name>_<tag>.sif
singularity pull docker://centos
singularity pull docker://ubuntu:18.04#删除镜像
rm -f ubantu.sif

3、singularity容器相关命令

#交互式运行容器,当前目录自动做映射
singularity shell ubuntu_18.04.sif  #进入容器内
Singularity> cat /etc/lsb-release  
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
#运行容器并执行一条命令
singularity exec ubuntu_18.04.sif bash -c  "cat /etc/lsb-release"
#运行容器,自动进入交互模式
singularity run ubuntu_18.04.sif  
#查看运行的容器实例
singularity instance list
#实例容器内执行命令,不进入容器内执行,instance表示容器内执行,容器名叫ub1 执行cat /etc/lsb-release
singularity exec instance://ub1 cat /etc/lsb-release
#交互进入容器
singularity shell instance://bu1
#停止示列
singularity instance stop ub1
#目录映射-B,挂载目录类似与docker中的-v 参数singularity shell -B /opt:/opt ubuntu_18.04.sif  #交互式目录映射 singularity instance start -B /opt:/opt ubuntu_18.04.sif ub1 #后台运行目录映射

4、singularity沙盒模式(重要概念)

#使用-sandbox选项创建沙盒镜像(不推荐此方法进入容器修改文件)singularity build --sandbox ubuntu/ docker://ubuntu:18.04  ls ubuntu
bin  boot  dev  environment  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  singularity  srv  sys  tmp  usr  var
#运行容器,添加-writabie参数,使容器变为可写容器,便于修改容器内容,此处需要以管理员身份运行(推荐)
singularity run --writable ubuntu/
Singularity> apt-get update
Singularity> apt install -y vim
#基于修改后的容器制作新的镜像(此处也需要管理员权限,因为上一步是以管理员身份安装的vim)
singularity build ubuntu-2.sif ubuntu/

5、持久化
Singularity 容器退出时,所有修改均丢失,可以通 Overlay 实现文件持久化
Singularity 的 Overay 其实就是一个目录或文件系统,使用 --overiay 指定,支持如下命令:
run
exec
shell
instance sta

#案例:
$ sudo singularity pull centos
$ sudo mkdir demo_overlay  #用于存放的修改
$ sudo singularity shell --overlay demo_overlay centos_latest.sif
Singularity> yum install -y vim
Singularity> which vim
/usr/bin/vim#再次执行,查看vim 存在
$ sudo singularity shell --overlay demo_overlay centos_latest.sif
Singularity> which vim
/usr/bin/vim#重新启动改镜像容器,查看vim不存在
sudo singularity shell centos_latest.sif

说明:
Singlarity 不能基于 Overiay日录创建镜像
6、使用singularity运行科学计算软件cpak

#下载镜像
singularity search cp2k
singularity build cp2k.sif library://pgarias/oarc/cp2k:v1.0
#准备输入文件Ce02111.inp,coord.xyZ,BASIS,POTENTIALS
#使用singularity运行计算
singularity exec cp2k.sif /opt/cp2k/exe/local/cp2k.ssmp -i CeO2_111.inp

除了可以命令行运行外,也可以结合脚本或者slurm调度完成作业提交

相关文章:

Singularity容器安装与使用

Singularity容器技术 docker的缺点: 资源限制问题:Slurm利用cgroups实现资源分配&#xff0c;Docker通过ocker daemon无法实现。 权限问题:Docker daemon使用 root用户启动&#xff0c;HPC场录期望使用普通用户运行容器。 singuiarily主要是适合HPC中的普通用户&#xff0c;…...

Linux 文件、重定向、缓冲区

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a; Linux 目录 一、文件 1、文件的理解&#xff08;浅层&#xff09; 1.文件是什么&#xff1f; 2.文件操作的前提 3.文件的存储 4.一个进程可以打开多个文件吗&#xff1f;如果可以怎么管理的&#xf…...

WEB漏洞-SQL注入之MYSQL注入

跨库注入的原理&#xff1a;针对同一IP下的不同域名 同一服务器下 网站A对应数据库A 网站B对应数据库B 网站C对应数据库C 如果某网站的存在注入点&#xff0c;注入点的权限恰好是root权限&#xff0c;也就是最高权限&#xff0c;那么可以通过跨库注入获取其他网站的数据库…...

mysql 查询 from a, b 和 a left join b 有什么区别

在MySQL中&#xff0c;from a, b 和 a left join b 有显著的区别&#xff0c;主要体现在查询结果和使用场景上。 基本语法与返回结果&#xff1a; from a, b&#xff1a;这种写法实际上是将两个表作为一个整体来处理&#xff0c;即假设这两个表是同一个表。因此&#xff0c;它…...

禁用ssh 22端口

在Linux系统中&#xff0c;要关闭SSH端口&#xff0c;可以通过修改SSH配置文件或防火墙规则来实现。 方法一&#xff1a;修改SSH配置文件 1. 使用root用户登录Linux系统。 2. 打开SSH配置文件&#xff0c;可以使用任何文本编辑器&#xff0c;如vi或nano。在大多数Linux发行版上…...

C++基础编程的学习3

nullptr关键字 在C11之前&#xff0c;空指针通常用NULL或0表示。然而&#xff0c;这些表示方法存在类型安全问题。C11引入了nullptr关键字&#xff0c;它提供了一个明确的、类型安全的空指针值。 Lambda表达式 Lambda表达式是C11引入的一种便捷的匿名函数定义方式。当Lambda…...

Java中的Optional类:解锁优雅编程的秘密

引言 在Java开发的世界里&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;一直是让无数程序员头疼的问题之一。它不仅打断了程序的正常执行流程&#xff0c;还可能隐藏在复杂的业务逻辑之中&#xff0c;难以定位。自Java 8起&#xff0c;一个新的类——Op…...

聆思CSK6大模型开发板语音控制风扇(上)

前言 本文介绍如何实现大模型语音交互对风扇实现开关控制&#xff0c;示例使用的硬件是聆思CSK6大模型开发板&#xff0c;大模型接的是星火大模型。本文将先详细介绍大模型云端从获取交互语音到下发控制指令的全过程&#xff0c;包括整合上下文、配置提示词、语义意图分类、提取…...

代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机II、123. 买卖股票的最佳时机III

一、121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com)——121. 买卖股票的最佳时机 视频讲解&#xff1a;动态规划之 LeetCode&#xff1a;121.买卖股票的最…...

延时队列与redis and rabbitmq

延时队列是什么 延时队列&#xff08;Delay Queue&#xff09;是一种特殊的消息队列&#xff0c;它允许你在添加消息时设置一个延时时间&#xff0c;消息只有在延时时间到达后才能被消费。这种机制在分布式系统中非常有用&#xff0c;常用于处理需要在指定时间后执行的任务&am…...

数据结构--单链

#include "link.h" plink get_head() { plink pmalloc(sizeof(Link)); if(pNULL) { printf("申情节点失败\n"); return NULL; } p->len0; p->nextNULL; return p; } void head_insert(plink L,int a) {…...

春秋云镜CVE-2023-38836

打开靶场环境 点击发现一个登陆框&#xff0c;弱口令试一下 发现账号密码为admin,password 随便点击点击 Media发现这里可以上传文件上传木马试试 <?php eval($_POST["wjq"]); ?> 发现不能上传php文件 php内容 修改他的格式 抓包绕过一下 302就可以其实已经…...

Linux 进程概念

Linux 进程概念 硬件理解冯 诺依曼体系结构五大组成部件强调存储 引子操作系统&#xff08;Operator System&#xff09;概念作用认识为什么要有操作系统&#xff1f; 结构 示意图理解操作系统system call库函数概念 进程什么是进程概念误区认识 描述进程 - PCBtask_struct - P…...

【秋招突围】2024届校招-米哈游笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🌰 明晚又有米…...

tklog v0.0.9 :Rust灵活高效日志管理

tklog是rust高性能结构化日志库&#xff0c;支持同步日志&#xff0c;异步日志&#xff0c;支持自定义日志的输出格式&#xff0c;支持按时间&#xff0c;按文件大小分割日志文件&#xff0c;支持日志文件压缩备份&#xff0c;支持官方日志库标准API&#xff0c;支持mod独立参数…...

长安链java-sdk打成jar包部署找不到配置文件,springBoot项目制作Docker镜像

长安链使用sdk_config.yml的形式来引入用户的各种证书文件&#xff0c; 但是打成jar包部署在服务器上会提示找不到文件。 由于国内对镜像的限制&#xff0c;我选用了阿里的龙蜥镜像&#xff0c;里面提供java1.8的环境&#xff0c;因为长安链要1.8的环境 docker pull anolis-…...

AI问答:理解软件开发中的几个概念 / 软件逆向、加密、加固、脱壳、反编译

一、软件逆向 定义软件逆向工程是指从程序系统出发&#xff0c;通过运用解密、反汇编、系统分析、程序理解等多种计算机网络安全技术&#xff0c;对软件的结构、流程、算法、代码等进行逆向的拆解分析&#xff0c;从而推出软件产品的源代码、设计原理、结构、算法、处理过程、…...

第十一届MathorCup高校数学建模挑战赛-C题:基于有限差分法的散热机理建模与海底数据中心优化设计

目录 摘 要 1 问题重述 1.1 问题背景 1.2 问题重述 2 问题分析 3 模型假设 4 符号说明 5 我们的工作 6 模型的建立与求解 6.1 建模前的准备 6.2 问题一的建模与求解 6.3 问题二的建模与求解 6.4 问题三的建模与求解 6.5 问题四的建模与解决 7 结果检验及误差分析 8 模型评价 9 …...

【java】常量

文章目录 什么是常量常量分类 什么是常量 程序运行过程当中&#xff0c;其值不可以发生改变的量。 常量分类 常量类型说明举例字符串常年用双引号括起来的内容“Hello World !” “我是一个常量”整数常量不带小数点的数字666 -888小数常量带小数的数字3.14、-3.19字符常量用…...

react如何使用useContext + TS 自定义hooks

为了在 TypeScript 中为 useContext 提供良好的类型提示&#xff0c;我们需要为 Context 定义类型&#xff0c;并确保在创建和使用 Context 时应用这些类型。这可以帮助我们获得更好的类型检查和智能提示。 示例&#xff1a;在用户认证示例中添加 TypeScript 类型 定义类型 …...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...