我想从 dockerfile 构建奇点容器。
我已经从 docker hub 中提取并运行了 docker 镜像。
singularity pull docker://ubuntu:latest
Run Code Online (Sandbox Code Playgroud)
我还从奇点配方文件构建了图像。
singularity build cpp.sif singularity_file
Run Code Online (Sandbox Code Playgroud)
但我想从 dockerfile 构建奇异图像。
任何人都知道该怎么做。是否可以 ???
当从定义文件构建 Singularity/Apptainer 映像时,是否有一种可移植的方法可以在构建过程中使主机系统的 SSH 密钥可用?
给出一些背景:
我有一个定义文件,在%post
我使用 SSH 克隆私有 git 存储库的部分中,即:
git clone git@github.com:luator/private_repo.git
Run Code Online (Sandbox Code Playgroud)
此操作会失败,因为在构建期间主机系统的 SSH 密钥在容器中不可用。
我可能可以复制容器中的密钥,并在构建过程结束时将其从那里删除。但是,为此,我需要对定义文件中密钥的路径进行硬编码,这在路径不同的另一台计算机上使用相同的定义文件时很糟糕。git clone
在构建过程中是否有更便携的方式来完成工作?
是否存在与 等价的奇点docker image list
?Singularity 3.8 文档指出
所有缓存条目均使用内容哈希命名
这在检查相同的图层/图像时有意义,但没有任何语义意义。将其与 docker 进行比较,dockerdocker image list
列出了您已经拥有的具有语义意义名称的映像(例如 ubuntu、ros)。例子:
$ singularity cache list -v
NAME DATE CREATED SIZE TYPE
496a66ed93a0244167905e 2021-07-23 18:20:26 0.57 KiB blob
6b05187eae388023ea3f9d 2021-07-23 18:20:26 0.34 KiB blob
a31c7b29f4ad2bd9467389 2021-07-23 18:20:26 27.24 MiB blob
sha256.9b0dafaadb1cd1d 2021-07-24 14:37:56 90.46 MiB library
sha256.cb37e547a142499 2021-07-23 18:10:22 55.39 MiB library
b3e2e47d016c08b3396b5e 2021-07-23 18:20:29 26.45 MiB oci-tmp
Run Code Online (Sandbox Code Playgroud)
相对
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
foxy-moveit2-tutorials latest ca302410c537 3 weeks …
Run Code Online (Sandbox Code Playgroud) 我想使用Docker来隔离用于HPC Unix集群的科学应用程序.科学软件通常具有外来依赖性,因此将它们与Docker隔离似乎是一个好主意.这些计划将作为工作而不是作为服务运行.
我希望有多个用户使用Docker,用户应该相互隔离.这可能吗?
我执行了本地Docker安装,并且在docker组中有两个用户.docker images
对两个用户显示相同结果的调用.
此外,作业应在调用用户的UID下运行,而不是以root身份运行.
这样的设置是否可行?以前做过吗?这记录在哪里?
让我们有一个简单的蛇文件
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
shell:
"somecommand {input} {output}"
Run Code Online (Sandbox Code Playgroud)
我想归纳出绘图规则,以便它可以在docker容器中运行,
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
singularity:
"docker://joseespinosa/docker-r-ggplot2"
shell:
"somecommand {input} {output}"
Run Code Online (Sandbox Code Playgroud)
如果我了解得很好,当我运行时,我会在docker容器中snakemake --use-singularity
获得该somecommand
运行,如果不对容器进行一些卷配置,则无法找到输入的csv文件。
您能否提供一个小的工作示例,说明如何在Snakefile或其他Snakemake文件中配置卷?
我有一个为我制作的奇点容器(用于在 Comet GPU 节点上运行张量流),但我需要根据我的目的修改 keras 安装。
我知道.simg
文件不可编辑(并且不推荐使用可写格式),因此不鼓励转换为文件、编辑然后转换回的.img
过程:.img
.simg
sudo singularity build --writable development.img production.simg
## make changes
sudo singularity build production2.img development.simg
Run Code Online (Sandbox Code Playgroud)
在我看来,最好的方法可能是提取内容(比如放入沙箱中),编辑它们,然后将沙箱重建为.simg
图像。
我知道如何进行第二次转换(singularity build new-sif sandbox
),但我该如何进行第一次转换?
我已尝试以下操作,但该命令从未完成:
sudo singularity build tf_gpu tensorflow-gpu.simg
WARNING: Authentication token file not found : Only pulls of public images will succeed
Build target already exists. Do you want to overwrite? [N/y] y
2018/10/12 08:39:54 bufio.Scanner: token too long
INFO: Starting build...
Run Code Online (Sandbox Code Playgroud) 我熟悉容器,但对 Singularity 很陌生,今晚我发现自己在 Singularity 容器中与损坏的 Python 安装作斗争。事实证明,这是因为在$HOME
我不知情的情况下被安装到我的容器中。
我想我已经喜欢上了 Python 中的“显式优于隐式”这句话。对我来说,自动安装特定目录是意想不到的行为。
三个问题:
--no-home
标志,但是是否有一个标志可以禁用所有默认安装而不需要更改默认的 Singularity 配置?我目前正在研究奇异性和 docker。我正在运行 MPI 环境的奇点。
我想利用 MPI 的奇点优势,但奇点文件非常大。因此,在运行奇点映像后,我想将其转换为 docker 映像,然后保存它,这将节省磁盘空间。
是否可以将奇点图像转换为 docker 图像?
当我运行时singularity exec foo.simg whoami
,我从主机获取自己的用户名,这与在 Docker 中我获取root
或容器指定的用户不同。
如果我查看/etc/passwd
这个 Singularity 容器的内部,就会发现已为我的主机用户 ID 添加了一个条目/etc/passwd
。
如果我不知道程序运行时的用户 ID,如何制作便携式 Singularity 容器?
我已将 Docker 容器转换为 Singularity 映像,但它希望作为它定义的特定用户 ID 运行,并且已将多个目录chown
分配给该用户。当我在 Singularity 下运行它时,我的主机用户无权访问这些目录。
这将是一个黑客,但我可以修改所有这些目录的图像chmod 777
。有没有更好的方法让这个图像像任何用户一样在 Singularity 上工作?
(我正在运行 Singularity 2.5.2。)
在服务器上,我们将持续集成作业作为奇点图像的运行脚本运行,例如
wget url_to_mysingularityimage.sif
chmod +x ./mysingularityimage.sif
./mysingularityimage.sif
Run Code Online (Sandbox Code Playgroud)
如果这是相关的:在我们的具体情况下,运行脚本是一个 bash 脚本。效果很好。
执行作业后,图像将被删除。
rm ./mysingularityimage.sif
Run Code Online (Sandbox Code Playgroud)
但看起来对应的循环设备仍然存在,即
losetup -a | grep mysingularityimage.sif
Run Code Online (Sandbox Code Playgroud)
输出类似:
/dev/loop27: []: (/path/to/mysingularityimage.sif (deleted)), offset 40960, sizelimit 831307776
Run Code Online (Sandbox Code Playgroud)
当我们运行作业时,循环设备的数量会增加。在某些时候,达到了循环设备的限制数量,奇点失败并出现错误:
FATAL: container creation failed: mount /proc/self/fd/3->/usr/local/var/singularity/mnt/session/rootfs error: while mounting image /proc/self/fd/3: failed to find loop device: could not attach image file to loop device: no loop devices available
Run Code Online (Sandbox Code Playgroud)
我们是不是做错了什么?是否有一个命令我们需要在每个作业结束时运行以确保循环设备被“释放”?
(注意:我们使用bamboo进行持续集成,并且bamboo总是在新目录中执行工作,这可以解释为什么相同的循环设备没有被重用。Bamboo:https: //www.atlassian.com/software/bamboo) 。