介绍另外一个容器技术, Apptainer

一说到容器,我们往往会脱口而出, Docker, 实际上Docker 仅仅是Linux 容器化的一种, 今天介绍的Apptainer 就是另外一种容器技术。

 

那么Apptainer 具体是一个什么东西呢? 跟Docker 有什么区别呢?

首先, 来回顾下什么是容器。

容器是一个隔离的环境,用于保存软件及其依赖项和配置。 容器可以在任何具有兼容容器技术的机器上运行。 容器实例可以从现有映像运行(部署)。 因此,用户必须首先构建(创建)镜像或获取现有镜像(例如从公共注册表中提取, 例如DockerHub)。 他们还可以彼此共享预构建的镜像,以便轻松地将软件分发到不同的系统,并且可以期望始终获得相同的结果。

Apptainer 和 Docker 是容器技术的不同实现。 Docker 是最流行的一种,但不幸的是不适合多用户环境。

Linux容器是一种使用单个 Linux 内核在控制主机上运行多个隔离的 Linux 系统(容器)的方法,

提供 cgroups 功能,允许对资源(CPU、内存、块 I/O、网络等)进行限制和优先级排序,而无需启动任何虚拟机。

Apptainer是一个容器平台。Apptainer(以前称为 )是一个免费的开源容器平台,允许您以简单、可移植、快速且安全的方式在独立映像(也称为“容器”)中创建和运行应用程序。 它执行操作系统级虚拟化,称为容器化。 Apptainer 适用于多用户环境,Apptainer 旨在为科学界和高性能计算 (HPC) 用例设计,可以运行 Singularity 以及 Docker 容器镜像。 使用 Apptainer,用户可以部署容器,并且在这些容器内部可以访问与在这些容器外部可以访问的相同资源。

Apptainer具有如下特点:

- 高度优化,可在笔记本电脑或高性能集群上运行,

- 非常快且轻量级 - 因为没有虚拟化,并且图像就像任何其他程序一样简单地执行,

- 实现运行容器的安全方式 - 可以轻松验证图像,

- 限制安全风险,因为它只能访问用户可访问的资源,

- 可以直接运行来自 Docker 存储库的映像(通过路径 docker://...)。

Apptainer 容器镜像是一个文件(例如 ubuntu_18.04.sif),包含执行该环境所需的所有程序和库,可以包含一小部分程序(带有库),或整个 Linux 操作系统(如 Alpine、CentOS 或 Ubuntu),在各种 Linux 操作系统和环境之间具有高度可移植性 - 它只需要安装 Apptainer,

容器文件系统环境在部署时默认是只读的(用户可以在运行时部分更改 ),

通常格式为.sif(奇点图像格式)、.sqfs(SquashFS)或.img(图像)ext3

也可以是一个目录而不是单个文件,包含所有需要的文件,可供容器外部的用户浏览。

为什么要使用Apptainer?

Apptainer 旨在以简单、可移植且可重复的方式在 HPC 集群上运行复杂的应用程序。 它首先由劳伦斯伯克利国家实验室开发,很快在其他 HPC 站点、学术站点等中流行起来。 Apptainer 是一个开源项目,拥有一个友好的开发人员和用户社区。 用户群不断扩大,Apptainer 现在在工业界和学术界的许多工作领域得到使用。

Apptainer 旨在允许容器像主机系统上的本机程序或脚本一样执行。 构建或运行容器不需要守护进程,并且安全模型与共享系统兼容。

因此,与 Univa Grid Engine、Torque、SLURM、SGE 等集群和调度程序的集成就像运行任何其他命令一样简单。 本地运行的程序使用的所有标准输入、输出、错误、管道、IPC 和其他通信路径都与容器内本地运行的应用程序同步。

Apptainer 倾向于对容器采用“集成而非隔离”的方法。 默认情况下,容器仅隔离挂载和用户命名空间,以便它们拥有自己的文件系统视图。 访问 GPU、高速网络和共享文件系统等硬件非常简单,不需要特殊配置。 对用户主目录、/tmp 空间和安装特定安装的默认访问使用户可以轻松地从容器化应用程序的可重复性中受益,而无需对其现有工作流程进行重大更改。 当更完整的隔离很重要时,Apptainer 可以使用额外的 Linux 命名空间以及其他安全和资源限制来实现这一点。

如果上面的介绍,还是有些干巴巴的话, 那么看一下Apptainer的常用命令,就会让你加深理解:

常用命令列表

- 从 Docker 存储库中提取容器镜像

$ apptainer pull docker://alpine:latest

- 在容器内启动交互式 shell

$ apptainer shell alpine_latest.sif

- 运行容器(这会执行其预定义的 runscript 命令)

$ apptainer run alpine_latest.sif

- 在容器内执行自定义命令

$ apptainer exec alpine_latest.sif cat /etc/os-release

-直接从 Docker 的存储库容器执行命令

$ apptainer exec docker://busybox:latest busybox | head -n1

- 直接从 Docker 镜像构建沙箱目录

$ apptainer build --sandbox alpine_sandbox docker://busybox:latest

-Shell 进入沙箱,假装是 root 用户并永久保存所有更改

$ apptainer shell --fakeroot --writable alpine_sandbox

-将沙箱转换为静态镜像

$ apptainer build alpine.sif alpine_sandbox

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

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

相关文章

【HarmonyOS】Java如何引用外部jar包

【关键字】 Java、引用jar包​ 【写在前面】 使用API6和API7开发HarmonyOS应用时,因为应用中只能引用SDK中开放的功能接口,但是部分jdk自带的接口功能在SDK中并未封装,要想在工程中使用jdk开放的接口功能,需要将jdk中的jar包通过…

【TS第三讲】完善TS开发环境

文章目录 🌟 写在前面🌟 ts-node🌟 nodemon🌟 nodemon文件类型🌟 nodemon文件范围🌟 写在最后 🌟 写在前面 🔥探索TypeScript世界,驭Vue3Ts潮流,开启前端之旅…

STM32--综述

文章目录 前言STM32简介STM32F103C8T6系统结构Keil软件安装注意事项新建工程操作流程 前言 本专栏将学习B站江协科技的STM32入门教程,通过自身理解和对老师的总结所写的博客专栏。 STM32简介 STM32是意法半导体(STMicroelectronics)公司推…

intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库

最容易出错的地方是在general面板下的host,不应该填真实的host地址,而应该填localhost或者127.0.0.1 具体操作步骤见下图

Shopify平台Fulfillment业务模块升级

上图是销售订单、发货单与配送之间的关系图,销售订单可以创建多个发货单,多个发货单(不同销售订单)可以合并在一个配送订单进行发货 接口请求错误记录: 1. The api_client does not have the required permission(s). 2. Required parameter missing or…

特殊符号的制作 台风 示例 使用第三方工具 Photoshop 地理信息系统空间分析实验教程 第三版

特殊符号的制作 首先这是一个含有字符的,使用arcgis自带的符号编辑器制作比较困难。所以我们准备采用Adobe Photoshop 来进行制作符号,然后直接导入符号的图片文件作为符号 我们打开ps,根据上面的图片的像素长宽比,设定合适的高度…

FastAPI和Flask:构建RESTful API的比较分析

Python 是一种功能强大的编程语言,广泛应用于 Web 开发领域。FastAPI 和 Flask 是 Python Web 开发中最受欢迎的两个框架。本文将对 FastAPI 和 Flask 进行综合对比,探讨它们在语法和表达能力、生态系统和社区支持、性能和扩展性、开发工具和调试支持、安…

【springboot项目】在idea中启动报错合集

一、IDEA中报错 “Error running ‘Application‘: Command line is too long.“ 的解决办法 报错详情: Error running Application: Command line is too long.Shorten command line for Application or also for Spring Boot default configuration.报错原因&am…

Linux 目录结构

初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home --- 存储普通用户的个人文件 ftp --- 用户所有服务httpdsambauser1user2bin --- 系统启动时需要的执行文件(二进制&#x…

【TypeScript】中关于 { 声明合并 } 的使用及注意事项

概念: 在TS中,如果定义了多个相同命名的函数,接口或者class 类,那么它们会自动合并成一个类型 函数的合并: 前面章节讲解的函数重载就是使用了定义多个函数的类型进行合并: function reverse(x: number):…

在家构建您的迷你聊天Chat gpt

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 什么是指令遵循模型? 语言模型是机器学习模型,可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词,并将其递减地反馈给模型以请求更多单词&#xff…

css3背景渐变

1.线性渐变 <style>.box {width: 200px;height: 200px;border: 1px solid black;float: left;margin-left: 50px;}.box1 {background-image: linear-gradient(green, yellow, red);}/* 右上 */.box2 {background-image: linear-gradient(to right top, green, yellow, re…

【前端 | CSS】aligin-items与aligin-content的区别

align-items 描述 CSS align-items 属性将所有直接子节点上的 align-self 值设置为一个组。align-self 属性设置项目在其包含块中在交叉轴方向上的对齐方式 align-items是针对每一个子项起作用&#xff0c;它的基本单位是每一个子项&#xff0c;在所有情况下都有效果&…

js案例:1.简单计算器

目录 一.效果图 二.实现思路 整体思路 ​ 1.关键是dom操作 ​ 2.设置点击事件 3.数据类型的隐式转换和赋值 三.完整代码 一.效果图 二.实现思路 整体思路 1.关键是dom操作 通过 document.getElementById(id) 获取html中的dom元素 每一个html标签都是一个对象&…

java【native关键字】

描述&#xff1a; native只能修饰方法&#xff0c;表示这个方法的方法体代码不是用java语言实现的&#xff0c;而是由c/c语言编写的。但是对于java程序员来说&#xff0c;可以当作java的方法一样正常去调用它&#xff0c;或者子类重写它 语法&#xff1a; 用在方法的返回值类…

【腾讯云 Cloud Studio 实战训练营】一个新的趋势已来

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

二分法的应用

文章目录 什么是二分法&#x1f3ae;二分查找的优先级二分查找的步骤&#x1f4a5;图解演示&#x1f9e9; 代码演示&#x1fad5;python程序实现&#x1f408;‍⬛C程序实现&#x1f415;‍&#x1f9ba;C程序实现&#x1f42f;Java程序实现&#x1f433; 非常规类二分查找&…

vue3 - 使用reactive定义响应式数据进行列表赋值时,视图没有更新的解决方案

文章目录 1&#xff0c;问题2&#xff0c;原因3&#xff0c;解决方案一、再封装一层数据&#xff0c;即定义属性名&#xff0c;在后期赋值的时候&#xff0c;对此属性进行直接赋值三、使用数组的splice来直接更改原数组三、使用 ref 来定义数据 1&#xff0c;问题 在Vue 3.0 中…

【VS Code插件开发】通用功能(二)

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

word横向页面侧面页码设置及转pdf后横线变竖线的解决方案

在处理材料的时候&#xff0c;会遇到同一个文档里自某一页开始&#xff0c;页面布局是横向的&#xff0c;这时候页码要设置在侧面&#xff0c;方法是双击页脚&#xff0c;然后在word工具栏上选择“插入”——>“文本框”——>“绘制竖版文本框”&#xff0c;然后在页面左…