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

这篇具有很好参考价值的文章主要介绍了介绍另外一个容器技术, Apptainer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

介绍另外一个容器技术, Apptainer,容器,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文章来源地址https://www.toymoban.com/news/detail-636900.html

到了这里,关于介绍另外一个容器技术, Apptainer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个事务插入,另外一个事务更新操作,是否会更新成功?

    同样另外一个非常有意思的题目,值得我们思考。大概背景是这个样子的。如果有一个事务A进行插入 id 100, 同时另外一个事务B进行更新update id 100。那么事务B是否会更新成功。我们来画一个时序图: time 事务A 事务B 备注 T1 insert id 100 set status = 1 T2 update id 100 set status = 2 T3 最后

    2023年04月13日
    浏览(40)
  • Android从一个APP跳转到另外一个APP

    启动另外一个目标APP(非覆盖原来APP的方式) 1、当前APP加入获取权限声明:(不加入权限检查,没法启动目标app) 2、执行跳转代码: 1、目标APP的对应Activity中加入action 2、当前应用执行跳转到目标APP * Intent跳转时捕获一下异常(略),防止目标对象不存在引起崩溃。

    2024年02月04日
    浏览(41)
  • 【git】从一个git仓库迁移到另外一个git仓库

    在远端服务器创建一个新的仓库 用界面创建,当然也可以用命令创建 拉去源仓库 拉去成功以后会出现 进入到文件夹内部 出现下面信息: 推送到新的远端仓库 查看新的仓库 备份完成,完美!

    2024年02月08日
    浏览(49)
  • 如何将linux数据从一个服务器复制到另外一个服务器

    首先先要确定两台服务器之间可以通讯 可以使用ping 服务器的地址查看是否通信 然后使用下面的步骤进行通讯 可以使用scp命令来在Linux系统中将文件或目录从一台服务器复制到另一台服务器。 语法为:scp [选项] 源路径 目标地址 其中,[选项]包括但不限于: 命令参数: 示例

    2024年01月19日
    浏览(48)
  • Oracle将一个表的字段更新到另外的一个表的字段

    table_1 t_id real_name 1 张三 2 李四 3 王五 table_2 id t_id name 88 1 赵六 96 2 54 3 把 table_1 的 real_name 更新到 table_2 的name字段中

    2024年02月17日
    浏览(46)
  • python如何调用另外一个py文件中的函数

    在Python中,可以通过导入模块的方式调用另外一个.py文件中的函数。具体步骤如下: 创建一个.py文件,其中包含需要调用的函数,例如: 在调用该函数的代码文件中,使用 import 导入这个.py文件(注意,要确保两个文件处于同一目录下),例如: 在这个例子中,首先

    2024年02月11日
    浏览(525)
  • jenkins pipeline如何在一个任务中触发另外一个任务以及从下游任务获取文件

            我们在创建jenkins任务的时候,有时候一个任务需要调用多个子任务来完成。比如,我们在编译某个镜像的时候,镜像由多个组件构成。那么我们就可以创建一个主任务以及多个子任务,主任务负责调用每个子任务,并将每个子任务的结果进行汇总,而子任务负责

    2024年02月11日
    浏览(42)
  • git :合并某个分支上某次commit记录到另外一个分支

    需要将A分支的某次提交记录 ,合并到B分支 1)切回到 A分支 找到提交的commit id 可以使用git log 命令 或者 右键上次提交的记录 copy reversion number         git checkout A git log 2)  切回到 B分支  使用 git cherry-pick  A的 commitID ,回车 3)最后git status /git push 如果遇到问题,可以使

    2024年02月16日
    浏览(68)
  • uniapp微信小程序跳转到另外一个小程序

    uni.navigateToMiniProgram 功能:打开另一个小程序。 App平台打开微信小程序,使用plus.share的launchMiniProgram。注意uni-app不需要plus ready,将plus ready里的代码写到页面的onLoad生命周期即可。使用此功能需在manifest中配置微信分享SDK信息,打包后生效。 各小程序平台对跳转到其他小程序

    2024年02月12日
    浏览(50)
  • ubuntu下 利用QT 实现嵌入另外一个程序到当前窗口

    查看当前应用窗口名称

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包