美文网首页生物信息工具docker
进阶 | 本地「Docker」镜像转换为「Singularity

进阶 | 本地「Docker」镜像转换为「Singularity

作者: 生信石头 | 来源:发表于2022-07-08 19:01 被阅读0次

    写在前面

    近期,组织了第三期暑期培训,想想也有四个年头。另外,分别给本科生和硕士生均分别讲过一学期的生物信息数据分析课程,其中实践部分,以往使用的是 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:7
    sudo 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
    
    #查看本地ip
    ip addr
    #ip为127:0:0:1
    

    在docker内配置适用的ip

    sudo vim /etc/docker/daemon.json
    
    #补充以下信息/ 修改成个人的ip/ 
    {
    "insecure-registries": ["127.0.0.1:5000"]
    }
    
    #重新启动docker
    sudo service docker stop
    sudo 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
    
    #设置上传镜像的tag
    sudo 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 即可用于分发。到任何生产环境,服务器或者集群,只需要

    #转成可写读的sandbox
    singularity build --sandbox ./centos centos_centos7.9.2009.sif
    #进入centos
    singularity shell -w centos
    
    实例:导入xialab2022暑期培训docker镜像

    根据上述的措施/先load -i 本地docker镜像后,再上传到本地仓库,再被singularity转换为sif镜像文件。学生只需要下载培训期间提供的scauclass.sif文件,即可用于个人服务器或集群

    #转换为sandbox
    singularity build --sandbox  ./scauclass  scauclass.sif
    #测试
    singularity run scauclass conda --help
    

    当然,可能需要注意的是暑期培训镜像有conda环境,几乎所有软件都是建立在conda环境下。
    接下来我们需要解决怎么调用scauclass镜像的conda环境?

    singularity run scauclass conda info -e
    

    是不能够直接激活,需要进行conda init


    #进入scauclass
    singularity shell -w scauclass
    #进入镜像
    Singularity> conda init
    Singularity> source .bashrc
    

    接下来就可以随意玩耍了

    conda activate xiasmallrna
    

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


    exit
    
    Singurlity 的优势:
    1. 在使用Singurlity过程下,几乎是没有使用到权限。方便了集群普通用户使用已经打包好的沙盒/镜像文件。Docker不管是安装、使用、修改都必须要有权限。
    2. 进入Singurlity 的环境,并没有封闭的空间。因此不需要提前映射本机路径,再进入环境。
    3. 没有容器的说法,只有可写的沙盒(sandbox)/不可写的镜像(sif),便于传输分发。

    写在最后

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

    相关文章

      网友评论

        本文标题:进阶 | 本地「Docker」镜像转换为「Singularity

        本文链接:https://www.haomeiwen.com/subject/hxribrtx.html