社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

生信石头 • 2 年前 • 471 次点击  

写在前面

近期,组织了第三期暑期培训,想想也有四个年头。另外,分别给本科生和硕士生均分别讲过一学期的生物信息数据分析课程,其中实践部分,以往使用的是 VituralBox。好处在于可以完全模拟服务器环境,从硬件到软件。而不好的地方在于,对应的环境几乎只适合学习或练习,无法直接使用到生产环境。
如此,即使学生掌握得再熟练,真正到生产环境时,也就是他们的服务器时,需要重新配置一次环境。尽管,conda等方式已经比较方便,但还是不够方便。
基于此,我一直使用 docker 的想法。经过一年左右的筹备,终于还是下定决定使用 docker 环境作为学生练习此举最大好处在于:

  1. 跨平台,无论是Windows、MacOS、Linux均可以直接使用

  2. 镜像可以迁移到不同环境

  3. 计算集群可以使用安装的 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

#进入scauclasssingularity shell -w scauclass#进入镜像Singularity> conda initSingularity> source .bashrc

接下来就可以随意玩耍了

conda activate xiasmallrna

接下来当然是检查一下conda环境下的软件可行与否?

exit
Singurlity 的优势:
  1. 在使用Singurlity过程下,几乎是没有使用到权限。方便了集群普通用户使用已经打包好的沙盒/镜像文件。Docker不管是安装、使用、修改都必须要有权限。

  2. 进入Singurlity 的环境,并没有封闭的空间。因此不需要提前映射本机路径,再进入环境。

  3. 没有容器的说法,只有可写的沙盒(sandbox)/不可写的镜像(sif),便于传输分发。

写在最后

感觉不错,一直想折腾的事情也确定可行了。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/137104
 
471 次点击