Singularity 是一种容器技术,用户可以在本地将软件打包成镜像,上传到服务器上运行。因为用户在本地计算机上拥有root权限,在制作软件的容器镜像时也拥有root权限,在部署安装应用的时候更加灵活。
(我在落地算法的时候需要用到ROS,使用学校的超算资源部署环境的时候,无法获得sudo权限。故悲惨打工人只能自己查阅资料,发现可以用集群可以提供的Singularity解决,所以开始自学,大家多多指教!)
先用ubuntu:16.04镜像体验一下如何使用singularity
获取镜像:
首先, 从Singularity Hub 或者 Docker Hub 获取 预编译镜像。
$ singularity pull ubuntu:16.04 # 根据需要选择版本
之后就可以在当前目录下得到 ubuntu_16.04.sif 文件。
运行镜像:
可以使用 shell 命令连接到容器中运行命令。
$ singularity shell ubuntu_16.04.sif
Singularity> pwd
/home/tutuzi
创建实例:
简单创建两个实例,成功后会显示 instance started successfully。
$ singularity instance start ubuntu_16.04.sif test1
$ singularity instance start ubuntu_16.04.sif test2
查看实例:
可以查看各实例对应的 DAEMON NAME, PID, CONTAINER IMAGE 信息。
$ singularity instance list
停止实例:
停止之前创建的 test1 和 test2 两个实例。
$ singularity instance stop test1
$ singularity instance stop test2
以 ubuntu16.04作为基础镜像创建容器
具体步骤参见:这篇说明:运行Singularity
相关的注解说明和我本人实践过程中遇到的问题以及对应的解决方案如下:
安装singularity(本地计算机)部分:
- 只能在 Linux 系统安装使用 singularity, 我本人拥有root权限的电脑是win10系统,所以需要使用虚拟机才创建镜像。
(如果也需要进行本步骤所需的安装和配置,可参照以下步骤,巨详细,均亲测有效!!)
sudo yum install -y gcc libuuid-devel squashfs-tools openssl-devel
export VERSION=1.15 OS=linux ARCH=amd64
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz
sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz
sudo rm -f go$VERSION.$OS-$ARCH.tar.gz
sudo vim /etc/profile
source /etc/profile
sudo vim /etc/sudoers
export VERSION=3.6.2
wget https://github.com/hpcng/singularity/releases/download/v${VERSION}/singularity-${VERSION}.tar.gz
tar -xzf singularity-${VERSION}.tar.gz
cd singularity
./mconfig
cd builddir/
sudo make && sudo make install
sudo rm -rf singularity*
制作singularity镜像:
参考官方文档:https://singularity.hpcng.org/user-docs/3.2/quick_start.html#singularity-definition-files
Singularity v3.0 and above produces immutable images in the Singularity Image File (SIF) format. This ensures reproducible and verifiable images and allows for many extra benefits such as the ability to sign and verify your containers.
创建sandbox的方法制作镜像:
su
singularity build --sandbox ./tutu_box docker://ubuntu:16.04
singularity shell -w ./tutu_box
apt-get -y update
apt-get -y install python2-minimal python-dev
安装ROS 可以参考官网 http://wiki.ros.org/kinetic/Installation/Ubuntu.
- Configure your Ubuntu repositories:
add-apt-repository universe
add-apt-repository multiverse
add-apt-repository restricted
apt-get update
- Setup your sources.list:
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- Setup your keys:
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- Installation:
apt-get update
apt-get install ros-kinetic-desktop-full
- Environment setup:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- Dependencies for building packages
apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
rosdep init
rosdep update
接下来我们讲使用 定义文件 来创建 SIF 容器环境 (ROS):
A Singularity Definition file is divided into two parts: Header & Section
BootStrap: docker
From: ubuntu:16.04
%post
apt-get -y update
apt-get install sudo
apt-get install python-minimal python-dev
apt-get install software-properties-common
add-apt-repository universe
add-apt-repository multiverse
add-apt-repository restricted
apt-get update
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
apt-get update
apt-get install ros-kinetic-desktop-full
apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
%environment
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
%runscript
rosdep init
rosdep update
%labels
测试ROS是否可以正常运行
source ~/.bashrc
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
|