Docker镜像转换为Singularity的sif格式镜像文件
需求
本地搭建了一些docker镜像,已有的方案用Cromwell投递WDL项目时用的是Singularity镜像,所以需要转为Singularity的sif格式镜像文件。
错误方案
同事之前已经写了一个将docker hub的镜像pull下来并转为sif格式的脚本,想改成用singularity build去处理本地docker镜像。
但是发现生成的sif文件名称没有sha256后面的验证码。
正常生成的sif名称类似:***_varscan2_sha256_b235818***************595db587df.sif,但是singularity build生成的的会类似***varscan2_sha256.sif。
原因是sha256验证码取的是docker镜像的RepoDigests,此信息只有当镜像被上传到docker hub后才会有。
本地搭建的,未上传到docker hub的镜像,使用docker images –digests查看会见到该镜像的DIGEST列的值为<none>。所以其实是sha256码本身就不存在,所以无法生成对应的文件名。
其实没有sha256的Singularity的sif格式镜像文件也可以用于Cromwell投递WDL项目,需要Cromwell配置文件设置参数。[这里挖一个坑,写好填上]
已有的用于Docker转换为Singularity的脚本:
1 | #! /bin/bash |
正确方案
先将本地的docker image上传到docker hub上(参考),生成Docker镜像的RepoDigests后,再跑一下上面的shell脚本。
- 注册docker hub账户,
https://hub.docker.com/
。 - 在服务器上登录docker hub,命令行docker login,输账号密码。
- 检查镜像的REPOSITORY命名方式,必须是“注册用户名/镜像名”。不符合的可以用docker tag
修改。修改后可以docker rmi 把旧的删掉。 - 上传镜像到docker hub,命令行docker push REPOSITORY:TAG,等待上传完毕即可。无需重新pull镜像,上传完本地的镜像就会有RepoDigests,可以通过docker images –digests查看。
- 退出当前docker hub账号,命令行docker logout。
- 使用上面的shell脚本将docker容器转为sif格式,传入参数是docker image的REPOSITORY:TAG。