Singularity(四)| 自定义容器

news2024/11/26 14:56:00

Singularity(四)| 自定义容器

4.1 Singularity Definition 文件

对于可复制的、高质量的容器,我们应该使用定义文件(Definition File)构建 Singularity 容器 。使用定义文件的方式可以在纯文本文件中描述容器的配置和构建过程。定义文件通常具有 .def 扩展名。在其中可以指定容器的基础镜像、安装软件包、设置环境变量等。然后使用 sudo singularity build 命令根据定义文件构建容器。这也使得添加文件、环境变量和安装定制软件变得容易。

定义文件包含一个 header 和一个 body。header 决定了开始使用的基础容器,body 进一步分为几个部分,这些部分执行诸如安装软件、设置环境以及将文件从主机系统复制到容器中的操作。

以下是一个定义文件的示例:

BootStrap: library
From: ubuntu:20.04

%
setup
 mkdir ${SINGULARITY_ROOTFS}/app

%
post
    apt-get -y update
    apt-get -y install fortune cowsay lolcat

%
environment
    export LC_ALL=C
    export PATH=/usr/games:$PATH

%
runscript
    fortune | cowsay | lolcat

%
labels
    Author GodloveD

在这个例子中,header 告诉 Singularity 使用来自容器库的基本 Ubuntu 20.04 镜像。

引导文件的主要内容分为几节(section)。在构建过程中,不同的节在不同的时间添加不同的内容或执行命令。注意,如果任何命令失败,构建过程将停止。def 文件中各节的顺序并不重要,在构建过程中可以包含多个同名的节,并将它们相互追加。

  • unsetunset%setupunsetunset

    在基本操作系统安装完成后,在容器外部的主机系统上执行 %setup 节中的命令。我们可以使用 %setup 节中的$SINGULARITY_ROOTFS 环境变量引用容器的文件系统。

    这里在容器的根目录下创建 app 这个文件夹用于放置我们的外部程序,如果使用 mkdir /app 则将在主机上文件系统的根目录下创建 app 文件夹。

  • unsetunset%filesunsetunset

    这一节允许将文件从主机系统复制到容器中,比使用 %setup 节更安全。每一行都是一个 <source><destination> 对,其中源是主机系统上的路径,目标是容器中的路径。当省略 <destination> 目标时,<source> 源将被看作与 destination 相同。

  • unsetunset%postunsetunset

    %post 部分在构建容器时内执行,但次序在安装基本操作系统后。因此,%post 部分是执行新应用程序安装的地方。在该节中,我们可以使用 gitwget 等工具从网上下载文件,安装新软件和库,编写配置文件,创建新目录等。

  • %environment

    部分定义了一些环境变量,这些变量将在运行时对容器可用。

  • %runscript

    定义了容器在 run 指令执行时要采取的操作。

  • %labels

    这部分允许将注释性内容(作者、更新时间等)添加到容器中。

我们可以按照以下方式调用 build 指令从这个定义文件构建一个容器(假设它是一个名为 lolcow.def 的文件),

singularity build lolcow.sif lolcow.def

这个小例子说明了可以使用定义文件完成的容器构建操作。

除了从 Docker Hub 等官方容器存储库的基本镜像(如 Ubuntu、Debian、CentOS、Arch 和 BusyBox)开始构建容器之外,我们还可以使用主机系统上的现有容器作为基础容器。

小技巧:

编写 def 文件建议利用 VScode 插件 Apptainer/Singularity (在插件商店直接搜索安装),其特别为后缀为 .def 的文件配置了语法高亮,看起来很舒服,见下图:

def_vscode

4.2 从容器仓库下载 Singularity 容器

Singularity Hub 是一个公共容器仓库,我们可以从中获取已经构建好的容器。使用 sudo singularity build 命令,指定 shub://URL 或 Singularity Hub 上容器的名称来下载并构建容器。例如:

$ singularity build mycontainer.sif shub://singularityhub/ubuntu

第一个参数 mycontainer.sif 指定容器的路径和名称。第二个参数 shub://singularityhub/ubuntu 给出了要下载的容器库 URI。默认情况下,容器将被转换为压缩的只读 SIF 格式。如果希望容器是可修改的状态,使用 --sandbox 选项。

4.3 修改本地 singularity 容器

如果已经有一个现成的 Singularity 容器,我们当然也可以直接使用该容器作为基础进行修改和扩展。前面我们提到,sif 格式为只读的压缩文件,因此如果我们现有为 sif 格式容器,我们需要先将容器转换为 sandbox 格式

使用 build --sandbox 指令和选项建立一个 sandbox:

singularity build --sandbox ubuntu ubuntu.sif
singularity build --sandbox ubuntu library://ubuntu

这个指令创建了一个名为 ubuntu 的 sandbox,其中包含整个 ubuntu 操作系统和当前工作目录下的一些 Singularity 元数据。

在此基础上,对 sandbox 容器使用 shellexecrun 指令,并结合 --writable 选项,我们就可以在沙箱目录中写入文件。在后面我们会对这些指令进行更详细的介绍。

singularity exec --writable ubuntu touch /foo
singularity exec ubuntu/ ls /foo
/foo

通过这种方式,我们可以进入镜像并安装软件和依赖项,直到容器完全满足我们的需求。

由于 build 指令可以接受已有容器作为目标,并以任何一种支持的格式创建容器,所以我们同样可以将 sandbox 转换为 SIF 格式:

singularity build ubuntu.sif ubuntu

4.4 基于 CentOS 7 的 singularity 容器

在此,我们为大家提供了一个基于 centOS 7 系统的容器定义文件,其中定义了常见的软件安装所需依赖包和库,且包含了 R、python、perl、java 和 PHP 等语言的解释器和标准运行环境。参考上述基于 def 文件的容器构建方法,我们可将这一容器构建为 sandbox,在此基础上进入容器后安装我们所需的各类软件。

Bootstrap: docker
From: centos:7.9.2009

%
setup
    mkdir ${SINGULARITY_ROOTFS}/app

%
files
    /mnt/data1/prog1/Container/ACGT101_PopGen/CentOS/R/R_base_pkgs.tar /app/R/R_base_pkgs.tar

%
post
    # compilie software that depends on the corresponding libraries.
    yum install -y gcc* glibc*
    # a comprehensive set of tools available for software development
    yum groupinstall -y "Development Tools"
    # a collection of utilities that extend the functionality of yum, such as yum-config-manager, yum-builddep, yumdownloader
    yum install -y yum-utils
    # provide a foreign function interface (FFI) that allows programming languages to call functions written in different languages
    yum install -y libffi*
    # provide an API for creating text-based user interfaces (TUI) in a terminal
    yum install -y ncurses ncurses-devel
    # edit and manipulate text input in a terminal, providing features like command history, line editing, tab completion ...
    yum install -y readline readline-devel
    # X Toolkit Intrinsics library, which is part of the X Window System
    yum install -y libXt libXt-devel
    # work with web APIs and performing network-related tasks such as downloading files, sending HTTP requests ...
    yum install -y libcurl curl curl-devel
    # parse, manipulate, and work with XML documents and data
    yum install -y xml libxml2 libxml2-devel
    # develope applications with scripting capabilities and graphical user interfaces
    yum install -y tcl tcl-devel tk tk-devel
    # provide functions and utilities for data compression and decompression
    yum install -y zlib* lzo* unzip zip bzip* xz*
    # an open-source software library that provides cryptographic functions and protocols to secure communications over computer networks
    yum install -y openssl* crypto*
    # graphics-related
    yum install -y libtiff* libjpeg* libpng* libXpm* cairo cairo-devel gd gd-devel igraph igraph-devel ImageMagick gnuplot* inkscape
    # system management software
    yum install -y smartmontools # Self-Monitoring, Analysis, and Reporting Technology (SMART) data of storage devices
    yum install -y net-tools     # managing and diagnosing network connections
    yum install -y sysstat       # a collection of performance monitoring tools for Linux systems
    # enable the development and deployment of applications that use SQLite for data storage and manipulation
    yum install -y sqlite*
    # a mature and widely-used open-source library for handling Unicode and globalized software development
    yum install -y libicu*
    # TeX document production system
    yum install -y texlive*
    # C++ library for rendering PDF documents
    yum install -y poppler-cpp
    # provide a rich set of functions and features for pattern matching and manipulation using regular expressions
    yum install -y pcre2 pcre2-devel
    # install useful apps
    yum install -y dos2unix wget which

    # provide a collection of additional software packages that are not available in the default repositories
    yum install -y epel-release
    yum-config-manager --enable epel

    # PHP
    yum install -y php
    # Java
    yum install -y java-1.8.0-openjdk*

    # > Perl
    yum install -y perl perl-ExtUtils-Embed perl-CPAN perl-GD

    # > Python
    # Install default python version 2.7.5
    yum install -y python Cython python-devel python-pip
    # Install python 3.9
    cd /app
    mkdir Python
    cd Python
    wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz
    tar -xzf Python-3.9.16.tgz
    cd Python-3.9.16
    ./configure --with-system-ffi --with-computed-gotos --enable-loadable-sqlite-extensions
    make -j 8
    make altinstall

    # > R
    # provide a set of routines (R version) for performing common linear algebra operations, such as matrix multiplication, vector operations ...
    yum install -y openblas-Rblas
    yum-builddep R -y
    # Install R 3.6.3
    cd /app/R
    tar -xf R_base_pkgs.tar
    cp R_base_pkgs/R-3.6.3.tar.gz .
    tar -zxvf R-3.6.3.tar.gz
    cd R-3.6.3
    ./configure --prefix=/usr/local/R-3.6.3 --enable-R-shlib --with-libpng --with-jpeglib --with-libtiff --with-cairo --with-x=no
    make -j8
    make install
    # Install R 4.2.1
    cd /app/R
    cp R_base_pkgs/R-4.2.1.tar.gz .
    tar -zxvf R-4.2.1.tar.gz
    cd R-4.2.1
    ./configure --prefix=/usr/local/R-4.2.1 --enable-R-shlib --with-libpng --with-jpeglib --with-libtiff --with-cairo --with-x=no
    make -j8
    make install

%
labels
    Author handsome_boy
    Version 1.0
    Time 2023/05/17

本文由 mdnice 多平台发布

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

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

相关文章

考研数学|汤家凤《1800》vs 张宇《1000》,怎么选?

汤家凤的1800题和张宇的1000题都是备考数学考研的热门选择&#xff0c;但究竟哪个更适合备考呢&#xff1f;下面分享一些见解。 首先&#xff0c;让我们来看看传统习题册存在的一些问题。虽然传统习题册通常会覆盖考试的各个知识点和题型&#xff0c;但其中一些问题在于它们可…

论文阅读:Editing Large Language Models: Problems, Methods, and Opportunities

Editing Large Language Models: Problems, Methods, and Opportunities 论文链接 代码链接 摘要 由于大语言模型&#xff08;LLM&#xff09;中可能存在一些过时的、不适当的和错误的信息&#xff0c;所以有必要纠正模型中的相关信息。如何高效地修改模型中的相关信息而不影…

LeetCode 每日一题 Day 95-101

2917. 找出数组中的 K-or 值 给你一个整数数组 nums 和一个整数 k 。让我们通过扩展标准的按位或来介绍 K-or 操作。在 K-or 操作中&#xff0c;如果在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值是 1 。 返回 nums 的 K-o…

SpringBoot扩展篇:Spring注入 @Autowired @Resource

Spring注入 Autowired & Resource 1. 概述1.1 职责1.2 流程概述 2. Demo3. AutowiredAnnotationBeanPostProcessor注册4. 注册元数据4.1 AutowiredAnnotationBeanPostProcessor#postProcessMergedBeanDefinition4.2 AutowiredAnnotationBeanPostProcessor#findAutowiringMe…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十二)-Multi-RTT定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

Hive面经

hive原理 Hive 内部表和外部表的区别Hive 有索引吗运维如何对 Hive 进行调度ORC、Parquet 等列式存储的优点数据建模用的哪些模型&#xff1f;1. 星型模型2. 雪花模型3. 星座模型 为什么要对数据仓库分层&#xff1f;使用过 Hive 解析 JSON 串吗sort by 和 order by 的区别数据…

React 教程

学习主要来源 React 教程 | 菜鸟教程 React 是一个用于构建用户界面的 JAVASCRIPT 库。 React 主要用于构建 UI&#xff0c;很多人认为 React 是 MVC 中的 V&#xff08;视图&#xff09;。 React 起源于 Facebook 的内部项目&#xff0c;用来架设 Instagram 的网站&#xff0…

GSEA -- 学习记录

文章目录 brief统计学原理部分其他注意事项转录组部分单细胞部分 brief 上一篇学习记录写了ORA&#xff0c;其中ORA方法只关心差异表达基因而不关心其上调、下调的方向&#xff0c;也许同一条通路里既有显著高表达的基因&#xff0c;也有显著低表达的基因&#xff0c;因此最后…

2023年第三届中国高校大数据挑战赛第二场赛题C:用户对博物馆评论的情感分析(附上代码与详细视频讲解)

问题重述&#xff1a; 博物馆是公共文化服务体系的重要组成部分。国家文物局发布&#xff0c; 2021 年我国新增备案博物馆 395 家&#xff0c;备案博物馆总数达 6183 家&#xff0c;排名全球前列&#xff1b;5605 家博物馆实现免费开放&#xff0c;占比达 90%以上&#xff1b;…

基于Springboot的高校汉服租赁网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校汉服租赁网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

蓝桥杯算法错题记录-基础篇

文章目录 本文还在跟新&#xff0c;最新跟新时间3/11&#xff01;&#xff01;&#xff01; 格式一定要符合要求&#xff0c;&#xff08;输入&#xff0c;输出格式&#xff09;1. nextInt () next() nextLine() 的注意事项2 .数的幂 a^2等3.得到最大长度&#xff08;最大...&a…

Redis缓存问题详解和处理

缓存更新策略 缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库. 常见的解决方案: 缓存空对象 优点: 实现简单, 维护方便缺点: 额外的内存消耗, 可能造成短期的不一致 布隆过滤 优点: 内存占用较少(保存的是数据…

【0基础学C语言】04-常量、变量

一、数据的存储 1.数据类型 首先来看看计算机是怎么存储数据的。总的来说,计算机中存储的数据可以分为两种:静态数据和动态数据。 1> 静态数据 概念:静态数据是指一些永久性的数据,一般存储在硬盘中。硬盘的存储空间一般都比较大,现在普通计算机的硬盘都有500G左右…

Leetcode每日一题[C++]-1261.在受污染的二叉树中查找元素

题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给出一个满足下述规则的二叉树&#xff1a; root.val 0如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1如果 treeNode.val x 且 treeNode.right ! nu…

这些年背过的面试题——SpringMVC篇

1 什么是SpringMVC &#xff1f;简单介绍下你对SpringMVC的理解? SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用…

ST MotorControl Workbench 6.2.1 使用总结

目录 前言 软件安装 根据自己硬件配置参数 生成代码 开发板运行 ​ 总结 前言 好久没有玩ST的电机库了&#xff0c;已经更新到了MotorControl Workbench 6.2.1&#xff0c;6以上的版本比5的版本界面操作有很大的不同&#xff0c;核心算法有些增加。最近体验了一把使用自…

jeecg 启动 微服务 更改配置本地host地址

1. windows系统下&#xff0c;在开始—运行里面输入(找不到运行菜单可直接按WinR键)&#xff1a; C:\WINDOWS\system32\drivers\etc &#xff0c;如图所示&#xff1a; 2. 用记事本 打开这个文件 在最下面输入这个即可

G. Rudolf and Subway

解题思路 每条边的边权可选&#xff0c;由颜色决定同一颜色的线路可以直达颜色最多有种考虑将颜色视作链接点&#xff0c;进行分层图跑最短路最终结果除2最多建条边&#xff08;直接存状态Map跑最短路被毙掉了&#xff09; import java.io.*; import java.math.BigInteger; im…

【案例】IPC 中的WinCC RT Advanced PC项目,如何下载及开机自动启动?

导读&#xff1a;TIA WinCC Advanced (高级版)V17项目如何下载到目标计算机&#xff08;需要运行项目的电脑&#xff09;&#xff1f; 01WinCC RT Adv项目下载 1、在计算机开始菜单中点击“运行”或通过Win键R调出运行窗口&#xff0c;并输入 CMD 然后回车&#xff1a; 打开 W…

虚拟化

什么是虚拟化 虚拟化&#xff08;Virtualization&#xff09;是一种资源分配和管理技术&#xff0c;是将计算机的各种实体资源,比如CPU、内存、磁盘空间、网络适配器等&#xff0c;进行抽象转换后虚拟的设备,可以实现灵活地分割、组合为一个或多个计算机配置环境&#xff0c;并…