进阶 | 本地「Docker」镜像转换为「Singularity」镜像,直接运行于任何服务

分享
计算机软件开发 2024-9-24 15:43:00 109 0 来自 中国
写在前面

近期,构造了第三期暑期培训,想想也有四个年初。别的,分别给本科生和硕士生均分别讲过一学期的生物信息数据分析课程,此中实践部分,以往利用的是 VituralBox。利益在于可以完全模仿服务器环境,从硬件到软件。而欠好的地方在于,对应的环境险些只适合与学习或训练,无法直接利用到生产环境。
云云,纵然弟子把握得再纯熟,真正到生产环境时,也就是他们的服务器时,须要重新设置一次环境。只管,conda等方式已经比力方便,但照旧不敷方便。
基于此,我不停利用 docker 的想法。经过一年左右的预备,终于照旧下定决定利用 docker 环境作为弟子接洽。此举最大利益在于:

  • 跨平台,无论是Windows、MacOS、Linux均可以直接利用
  • 镜像可以迁徙到差别环境
  • 盘算集群可以利用安装的 singularity 来利用 docker 镜像
有了这些为基础,只要弟子把握课程上的内容,那么课程干系镜像,完全直接用于他们个人电脑、服务器以致盘算集群上。
前述,关于 docker 已经做了不少介绍,感爱好的朋侪可以翻看往期推文。今次,重要介绍,怎样将自己创建的 docker 镜像转换为 singularity 镜像,以及转换之后,怎样利用。
docker 镜像转换为 singularity 镜像

预备一个本地的 docker 镜像

为了方便演示,起首,创建本地的 docker 堆栈服务(用的也是 docker),注意:如果是windows,那么须要在 wsl2 中安装好 docker 后实行。
sudo docker pull centos:7sudo docker run -it centos:7 #进入,exit可以退出环境#检察docker已有的镜像sudo docker images#REPOSITORY   TAG       IMAGE ID       CREATED        SIZE#centos       7         eeb6ee3f44bd   9 months ago   204MB利用docker官方提供的registry镜像,搭建本地docker堆栈镜像服务

sudo docker pull registry#检察本地ipip addr#ip为127:0:0:1
在docker内设置实用的ip
sudo vim /etc/docker/daemon.json#增补以下信息/ 修改成个人的ip/ {"insecure-registries": ["127.0.0.1:5000"]}#重新启动dockersudo service docker stopsudo service docker start sudo docker info #检察下图
将本地的 docker 镜像上传到 本地的 docker 镜像堆栈(有点绕,毕竟上,此处就是通过构建本地镜像堆栈来替换 hub.docker.com 官方提供的堆栈服务)
sudo docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry#检察是否建好堆栈sudo docker ps#设置上传镜像的tagsudo docker tag centos:7 127.0.0.1:5000/centos:7 #上传到本地堆栈sudo docker push 127.0.0.1:5000/centos:7 #检察堆栈的镜像curl http://127.0.0.1:5000/v2/_catalog利用 singularity 转换镜像为 docker 镜像

#从本地堆栈转化成sif镜像singularity build --no-https  mycentos.sif  docker://127.0.0.1:5000/centos:7云云,输出的 mycentos.sif 即可用于分发。到任何生产环境,服务器大概集群,只须要
#转成可写读的sandboxsingularity build --sandbox ./centos centos_centos7.9.2009.sif#进入centossingularity shell -w centos实例:导入xialab2022暑期培训docker镜像

根据上述的步调/先load -i 本地docker镜像后,再上传到本地堆栈,再被singularity转换为sif镜像文件。弟子只须要下载培训期间提供的scauclass.sif文件,即可用于个人服务器或集群
#转换为sandboxsingularity build --sandbox  ./scauclass  scauclass.sif#测试singularity run scauclass conda --help当然,大概须要注意的是暑期培训镜像有conda环境,险些全部软件都是创建在conda环境下。
接下来我们须要办理怎么调用scauclass镜像的conda环境?
singularity run scauclass conda info -e
是不可以或许直接激活,须要举行conda init

5.png #进入scauclasssingularity shell -w scauclass#进入镜像Singularity> conda initSingularity> source .bashrc
接下来就可以随意玩耍了
conda activate xiasmallrna
接下来当然是查抄一下conda环境下的软件可行与否?

exitSingurlity 的上风:


  • 在利用Singurlity过程下,险些是没有利用到权限。方便了集群平凡用户利用已经打包好的沙盒/镜像文件。Docker不管是安装、利用、修改都必须要有权限。
  • 进入Singurlity 的环境,并没有封闭的空间。因此不须要提前映射本机路径,再进入环境。
  • 没有容器的说法,只有可写的沙盒(sandbox)/不可写的镜像(sif),便于传输分发。
写在末了

感觉不错,不停想折腾的变乱也确定可行了。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 18:17, Processed in 0.172225 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表