介绍另外一个容器技术, 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】python通过cmd创建虚拟环境(pip方式)

前言: 在window中使用pipenv创建虚拟环境时,虚拟环境默认的位置是在C:\User\Administrator\.virtualenvs\目录下;那如果我们想配置到自定义位置,该如何修改呢?当我们在进行python项目开发的时候,为了不让项…

tcl学习之路(四)(vivado设计分析)

1.FPGA芯片架构中的对象 在打开elaborated/synthesied/implemented的情况下,可使用如下命令获取期望的SLICE。SLICE分为SLICEL和SLICEM,由LUT、FF、MUX、CARRY组成。 set all_slice [get_sites SLICE*] set col_slice [get_sites SLICEX0Y*] set all_sl…

【资料分享】全志科技T507-H工业核心板规格书

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板,主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

【爱书不爱输的程序猿】内网的摄像头,远程进行访问的方式方法

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 快速远程访问内网的摄像头【内网穿透】 前言一、快速远程访问内网的摄像头1. 打开“允许远程桌面”开关2. 建立TCP-IP隧道3. 获取生成的TCP-IP隧道地址4. 连接另一台电脑4.1 取得该…

Python自动化测试基础必备知识点总结

目录 一、自动化测试的概念 二、Python自动化测试基础必备知识点 一、自动化测试的概念 性能系统负载能力稳定性过载操作下的系统瓶颈自动化测试,使用程序代替人工,可以提高测试效率性,自动化测试能自动化使用代码模拟大量用户&#xff0c…

java+springboot+mysql小区宠物管理系统

项目介绍: 使用javaspringbootmysql开发的小区宠物管理系统,系统包含超级管理员,系统管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;宠物分类;宠物管理&…

【Unity细节】Unity打包后UI面板消失是怎么回事

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐关于物体的动画碰到其他碰撞器后停止播放的问题⭐ 文章目录 ⭐关于物体的动画碰…

Netty:用forEachByte遍历处理ByteBuf中的可读字节

说明 io.netty.buffer.ByteBuf的forEachByte(ByteProcessor processor)用指明的ByteProcessor 遍历ByteBuf中的可读字节。遍历的时候用升序遍历。 -这个函数可以在ByteBuf中寻找某个字节首次出现的位置,或者首次不是某个字节的位置。 如果已经遍历完了可读字节但还…

Spring Cloud Gateway

一 什么是Spring Cloud Gateway 网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Clo…

Unity背包系统与存档(附下载链接)

下载地址: https://download.csdn.net/download/qq_58804985/88184776 视频演示: 功能: 拖动物品在背包中自由移动,当物品拖动到其他物品上时,和其交换位置.基于EPPlus的背包数据与位置保存 原理: 给定一个道具池表格与一个背包表格 道具池表格负责存储所有道具的信息 背…

[分享]STM32G070 串口 乱码 解决方法

硬件 NUCLEO-G070RB 工具 cubemx 解决方法 7bit 改为 8bit printf 配置方法 添加头文件 #include <stdio.h> 添加重定向代码 #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endi…

网络安全(黑客)常用工具(附配套资料+工具安装包)

几十年来&#xff0c;攻击方、白帽和安全从业者的工具不断演进&#xff0c;成为网络安全长河中最具技术特色的灯塔&#xff0c;并在一定程度上左右着网络安全产业发展和演进的方向&#xff0c;成为不可或缺的关键要素之一。 话不多说&#xff0c;2022年全球白帽常用工具排行榜…

解决Windows:Call to undefined function exif_imagetype()

很明显,是php安装时没有打开某些扩展,以致不能执行exif_imagetype()这个方法,因此需要打开。 网上很多人说需要打开下面这两个扩展: extension=php_exif.dll extension=php_mbstring.dll 但只说对了一半,我一开始也按照网上文章说的打开这两个扩展,但是还是同样错误。…

Leetcode-每日一题【剑指 Offer 14- II. 剪绳子 II】

题目 2、3、3的三段&#xff0c;此时得到的最大乘积是18。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1000000008&#xff0c;请返回 1。 示例 1&#xff1a; 输入: 2输出: 1解释: 2 1 1, 1 1 1 示例 2: 输入: 10输出…

Tensorflow2-初识

TensorFlow2是一个深度学习框架&#xff0c;可以理解为一个工具&#xff0c;有谷歌的全力支持&#xff0c;具有易用、灵活、可扩展、性能优越、良好的社区资源等优点。 1、环境的搭建 1.1 Anaconda3的安装 https://www.anaconda.com/ Python全家桶&#xff0c;包括Python环境和…

无涯教程-Perl - int函数

描述 此函数返回EXPR的整数元素,如果省略则返回$_。 int函数不进行舍入。如果需要将值四舍五入为整数,则应使用sprintf。 语法 以下是此函数的简单语法- int EXPRint返回值 此函数返回EXPR的整数部分。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$int_valint…

[保研/考研机试] KY180 堆栈的使用 吉林大学复试上机题 C++实现

题目链接&#xff1a; 堆栈的使用_牛客题霸_牛客网 描述 堆栈是一种基本的数据结构。堆栈具有两种基本操作方式&#xff0c;push 和 pop。其中 push一个值会将其压入栈顶&#xff0c;而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。 输入描述&#xff1a; 对于…

springboot项目get请求下划线转驼峰@JsonProperty注解失效问题

问题&#xff1a;解决sprigboot项目get请求中有下划线的入参参数&#xff0c;如&#xff1a;first_name&#xff0c;希望在项目中将下划线格式转成firstName&#xff0c;用JsonProperty注解发现失效问题 1.核查&#xff1a;JsonProperty注解对应包是否正确 正确包&#xff1a…

虹科新闻 | 虹科与Power-MI正式建立合作伙伴关系

近日&#xff0c;虹科与Power-MI正式建立合作伙伴关系&#xff0c;双方就工业预测性维护领域进行深入的交流与合作&#xff0c;未来将共同致力于为亚洲市场提供完整的、更高质量的预测性维护解决方案&#xff0c;解决亚洲客户的工业自动化挑战。 虹科与Power-MI都表示十分期待…

14-矩阵相乘及其运算法则

矩阵与向量的乘法 在这一篇文章中我们就将基于上一篇重新审视矩阵的这个视点来理解矩阵的乘法&#xff0c;那么在这一篇&#xff0c;我们主要来看一下矩阵和向量的乘法。这里这个线性方程组是上一小节给大家举的模拟的一个非常简单的小型经济系统的例子&#xff0c;我们可以把…