Singularity 容器

Singularity 是一種流行的容器技術(shù)氯哮,專為高性能計(jì)算(HPC)和科學(xué)計(jì)算應(yīng)用設(shè)計(jì)老速。與 Docker 等其他容器技術(shù)不同贞绵,Singularity 可以直接在用戶空間中運(yùn)行者祖,而不需要特權(quán)或守護(hù)進(jìn)程孵构。這使得 Singularity 在 HPC 環(huán)境中非常受歡迎屁商,因?yàn)檫@些環(huán)境通常對(duì)安全性和多用戶支持有嚴(yán)格的要求。

singularity 容器的優(yōu)點(diǎn)包括:

  • 不需要 sudo 權(quán)限即可運(yùn)行(與 Docker 不同)颈墅;
  • 在多節(jié)點(diǎn)環(huán)境中與 HPC 資源管理器很好地互操作蜡镶;
  • 默認(rèn)情況下,輕松利用集群或服務(wù)器上的 GPU恤筛、高速網(wǎng)絡(luò)帽哑、并行文件系統(tǒng);
  • 能夠?qū)?Docker 鏡像轉(zhuǎn)換為 Singularity叹俏。

系統(tǒng)安裝

$ sudo apt-get update && sudo apt-get install -y \
    build-essential \
    libssl-dev \
    uuid-dev \
    libgpgme11-dev \
    squashfs-tools \
    libseccomp-dev \
    pkg-config
$ sudo yum update -y && \
    sudo yum groupinstall -y 'Development Tools' && \
    sudo yum install -y \
    openssl-devel \
    libuuid-devel \
    libseccomp-devel \
    wget \
    squashfs-tools

Singularity的使用主要分為三步:拉绕拚怼(或構(gòu)建)鏡像,使用鏡像粘驰,以及刪除鏡像屡谐。以下是這些步驟的詳細(xì)說(shuō)明:

1. 拉取(或構(gòu)建)鏡像

可以從Singularity Hub或Docker Hub拉取預(yù)構(gòu)建的鏡像蝌数,也可以使用定義文件從頭開(kāi)始構(gòu)建自己的鏡像愕掏。

以下是從Docker Hub拉取一個(gè)Ubuntu鏡像的例子:

singularity pull docker://ubuntu
singularity pull sub://ubuntu:latest
# 從docker hub中pull
singularity pull docker://ubuntu:latest
# pull并保存鏡像文件
singularity pull ubuntu.latest.sif sub://ubuntu:latest

這會(huì)將Docker的ubuntu鏡像保存為一個(gè)Singularity鏡像文件,名為ubuntu_latest.sif顶伞。

如果想從頭開(kāi)始構(gòu)建自己的鏡像饵撑,需要?jiǎng)?chuàng)建一個(gè)定義文件,然后使用singularity build命令唆貌。定義文件可能如下所示:

Bootstrap: docker
From: ubuntu:18.04

%post
    apt-get update && apt-get install -y python

然后滑潘,可以使用以下命令構(gòu)建鏡像:

sudo singularity build my_image.sif my_def.def

在這個(gè)例子中,my_image.sif是輸出的鏡像文件锨咙,my_def.def是定義文件语卤。

2. 使用鏡像

一旦有了一個(gè)Singularity鏡像,可以使用singularity shellsingularity exec粹舵,或singularity run命令來(lái)使用它钮孵。

例如,以下命令會(huì)在一個(gè)Ubuntu鏡像中啟動(dòng)一個(gè)shell:

singularity shell ubuntu_latest.sif

也可以直接執(zhí)行鏡像中的命令眼滤,如下所示:

singularity exec ubuntu_latest.sif echo "Hello, world!"

singularity run 命令用于運(yùn)行 Singularity 容器的默認(rèn)運(yùn)行腳本巴席。這個(gè)腳本是在容器的構(gòu)建過(guò)程中定義的,通常用于啟動(dòng)應(yīng)用程序或服務(wù)诅需。

例如情妖,如果Singularity 容器包含一個(gè) web 服務(wù)器,可以使用 singularity run 命令來(lái)啟動(dòng)它:

singularity run my_web_server.sif
### 這個(gè)命令會(huì)運(yùn)行 my_web_server.sif 容器的默認(rèn)運(yùn)行腳本诱担,該腳本應(yīng)該啟動(dòng) web 服務(wù)器毡证。

其他

# shell方法
singularity shell ubuntu.latest.sif
# -B 參數(shù)與docker run的-v參數(shù)類似
singularity shell -B /data:/data ubuntu.latest.sif
# run方法
singularity run ubuntu.latest.sif
# exec方法
singularity exec --containall --bind ${cwd}:${docker_cwd} ubuntu.latest.sif /bin/bash script.sh

3. 刪除鏡像

刪除一個(gè)Singularity鏡像就像刪除一個(gè)普通的文件那樣簡(jiǎn)單。只需要使用rm命令:

rm ubuntu_latest.sif

這將會(huì)刪除ubuntu_latest.sif鏡像蔫仙。

這些步驟涵蓋了Singularity的基礎(chǔ)使用料睛。

在Singularity中使用環(huán)境變量和掛載主機(jī)目錄的方法如下:

使用環(huán)境變量

在Singularity容器中使用環(huán)境變量,可以在定義文件中使用%environment部分來(lái)設(shè)置環(huán)境變量摇邦。例如:

Bootstrap: docker
From: ubuntu:18.04

%environment
    export MYVAR="Hello, world!"

這將在容器環(huán)境中創(chuàng)建一個(gè)名為MYVAR的環(huán)境變量恤煞,其值為"Hello, world!"。

也可以在啟動(dòng)容器時(shí)使用-e--cleanenv選項(xiàng)清除所有環(huán)境變量施籍,然后使用-E--env選項(xiàng)設(shè)置新的環(huán)境變量居扒。例如:

singularity exec --cleanenv --env MYVAR="Hello, world!" my_image.sif echo $MYVAR

這會(huì)在一個(gè)清潔的環(huán)境中運(yùn)行容器,其中只有一個(gè)名為MYVAR的環(huán)境變量丑慎。

掛載主機(jī)目錄

Singularity允許容器中掛載主機(jī)文件系統(tǒng)的目錄喜喂。可以使用-B--bind選項(xiàng)來(lái)實(shí)現(xiàn)這一點(diǎn)竿裂。例如:

-B 參數(shù)與docker run的-v參數(shù)類似

singularity exec -B /path/to/host/dir:/path/to/container/dir my_image.sif ls /path/to/container/dir

這會(huì)將主機(jī)上的/path/to/host/dir目錄掛載到容器的/path/to/container/dir目錄玉吁,然后在容器中列出該目錄的內(nèi)容。

也可以在定義文件中使用%files部分來(lái)復(fù)制文件或目錄到容器腻异。例如:

Bootstrap: docker
From: ubuntu:18.04

%files
    /path/to/host/file /path/to/container/file

這將在構(gòu)建容器時(shí)將主機(jī)上的/path/to/host/file復(fù)制到容器的/path/to/container/file进副。

直接設(shè)置運(yùn)行環(huán)境

比如我外部Linux的運(yùn)行目錄為/home/xxxx,直接設(shè)置下面的Singularity環(huán)境即可讓Singularity里面的軟件識(shí)別到外界的環(huán)境

export SINGULARITY_BIND="/home/xxxx" ### 可以加載到bashrc
singularity exec  my_image.sif ls /home/xxxx

Singularity的官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悔常,一起剝皮案震驚了整個(gè)濱河市影斑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌机打,老刑警劉巖矫户,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姐帚,居然都是意外死亡吏垮,警方通過(guò)查閱死者的電腦和手機(jī)障涯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門罐旗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膳汪,“玉大人,你說(shuō)我怎么就攤上這事九秀∫潘裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鼓蜒,是天一觀的道長(zhǎng)痹换。 經(jīng)常有香客問(wèn)我,道長(zhǎng)都弹,這世上最難降的妖魔是什么娇豫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮畅厢,結(jié)果婚禮上冯痢,老公的妹妹穿的比我還像新娘。我一直安慰自己框杜,他們只是感情好浦楣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著咪辱,像睡著了一般振劳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上油狂,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天历恐,我揣著相機(jī)與錄音,去河邊找鬼专筷。 笑死夹供,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仁堪。 我是一名探鬼主播哮洽,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼弦聂!你這毒婦竟也來(lái)了鸟辅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤莺葫,失蹤者是張志新(化名)和其女友劉穎匪凉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體捺檬,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡再层,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聂受。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒿秦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛋济,到底是詐尸還是另有隱情棍鳖,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布碗旅,位于F島的核電站渡处,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏祟辟。R本人自食惡果不足惜医瘫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旧困。 院中可真熱鬧醇份,春花似錦、人聲如沸叮喳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馍悟。三九已至畔濒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锣咒,已是汗流浹背侵状。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毅整,地道東北人趣兄。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悼嫉,于是被迫代替她去往敵國(guó)和親艇潭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353