用Singularity代替Docker

前言

Singularity 是一种容器技术,用户可以在本地将软件打包成镜像,上传到服务器上运行。因为用户在本地计算机上拥有root权限,在制作软件的容器镜像时也拥有root权限,在部署安装应用的时候更加灵活。

在使用实验室服务器时,因为不是root用户,也没有sudo权限,一些环境的部署很是蛋疼。无意中了解到,使用Singularity刚好可以成为Docker的替代方案,故而开个坑。

cat.gif

下载已存在镜像

和Docker类似,要运行 Singularity 也需要先获取镜像,Singularity 可以从Singularity Hub 或者 Docker Hub 来获取预编译的镜像,或者编译新镜像。

1
2
3
4
5
6
7
8
9
10
11
# 获取预编译镜像 (会在当前目录下下载 ubuntu_<tag>.sif 文件)
$ singularity pull ubuntu
$ singularity pull docker://ubuntu

# 从 Singularity Hub build 镜像
$ singularity -d build lolcow.simg shub://GodloveD/lolcow

# 从 Docker Hub build 镜像
$ singularity -d build lolcow.simg docker://godlovedc/lolcow
$ singularity -d build centos.simg docker://centos
$ singularity -d build ubuntu.simg docker://ubuntu

交互模式运行

1
2
3
4
5
6
7
8
9
10
$ singularity shell --nv ubuntu.simg # 启用 Nvidia GPU 支持 [ --nv ]
Singularity: Invoking an interactive shell within container...

Singularity ubuntu.simg:~> pwd
/home/kuhn
Singularity ubuntu.simg:~> id
uid=1000(admin) gid=1000(admin) groups=1000(admin),10(wheel)

$ singularity exec torch.sif python --version
Python 3.8.12

运行&退出一个容器

1
2
3
4
(base)kuhn@amax-59:~$ singularity run ubuntu.simg
kuhn@amax-59:~$ exit
exit
(base)kuhn@amax-59:~$

后台运行容器实例

启动实例

1
2
$ singularity instance start ubuntu.simg test1
$ singularity instance start ubuntu.simg test2

查看实例

1
2
3
4
$ singularity instance list
DAEMON NAME PID CONTAINER IMAGE
test1 14172 /home/admin/ubuntu.simg
test2 14239 /home/admin/ubuntu.simg

操作实例

可以通过 shell, exec, run 命令来连到容器中运行命令

  • 使用 shell 命令连入容器
1
2
3
4
5
6
$ singularity shell instance://test1
Singularity ubuntu.simg:~> ps -ef
UID PID PPID C STIME TTY TIME CMD
admin 1 0 0 03:14 ? 00:00:00 singularity-instance: admin [test1]
admin 3 0 3 03:14 pts/0 00:00:00 /bin/bash --norc
admin 4 3 0 03:14 pts/0 00:00:00 ps -ef
  • 使用 exec 执行命令
1
2
3
4
$ singularity exec instance://test1 ps -ef
UID PID PPID C STIME TTY TIME CMD
admin 1 0 0 03:14 ? 00:00:00 singularity-instance: admin[test1]
admin 6 0 0 03:15 pts/0 00:00:00 ps -ef

停止实例

1
2
$ singularity instance stop test1
$ singularity instance stop test2

Reference

SingularityCE User Guide Documentation

Singularity 快速上手, 带你飞

运行 Singularity · GitBook (whu.edu.cn)


用Singularity代替Docker
https://nessaj7.github.io/2022/05/20/5a3de975bb65.html
作者
kuhn
发布于
2022年5月20日
许可协议