安裝使用可支持GPU的Docker容器

因研究需要量没,要使用Docker梨熙,參考官網(wǎng)上的安裝方法也遇到了不少坑,博主是個(gè)聰明人懶人...不想再次踩坑欠啤,于是記錄下來荚藻。聰明的你看了這篇以后也一定能避開這些技能點(diǎn)坑的。

安裝環(huán)境:Ubuntu 16.04

docker的官方網(wǎng)站:https://www.docker.com/
docker的官方文檔:https://docs.docker.com/
docker可支持的系統(tǒng):https://docs.docker.com/install/
docker安裝步驟詳解(英文):https://docs.docker.com/install/linux/docker-ce/ubuntu/

其他的根據(jù)左側(cè)的列表選擇即可

一.Docker 安裝

A.下載deb包的安裝方式

1.ubuntu16.04 amd 架構(gòu)對應(yīng)的下載地址:

https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/

ps: ubuntu其他版本/架構(gòu)的下載地址:

打開: https://download.docker.com/linux/ubuntu/dists/
選擇您的Ubuntu版本對應(yīng)的代號(不清楚代號是多少洁段?看這里
進(jìn)到pool / stable /
選擇機(jī)器支持的架構(gòu)amd64应狱,armhf或s390x,進(jìn)入下載列表.

2.安裝

sudo dpkg -i /path/to/docker.deb

B.添加源的安裝方式

(一)祠丝、安裝docker前的準(zhǔn)備

首先刪除舊版本

 sudo apt-get remove docker docker-engine docker.io

更新
然后進(jìn)行更新和安裝必要的軟件

sudo apt-get update
sudo apt-get install 
     apt-transport-https \\
     ca-certificates \\
     curl \\
     gnupg2 \\
     software-properties-common 

這時(shí)候就需要網(wǎng)本地源里添加GPG密鑰了疾呻,我系統(tǒng)原本是阿里源可是不知怎么始終找不到https://download.docker.com/linux/ubuntu/gpg,萬萬妹想到写半,這真是個(gè)神坑岸蜗,找遍了教程包括https://blog.csdn.net/u014155354/article/details/52904845為代表的一類,最后發(fā)現(xiàn)并不是同一個(gè)問題叠蝇,我本地是apt源的問題璃岳。而你如果按照官方文檔上寫如下這個(gè)命令,會(huì)遇到這個(gè)問題,

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Terminal報(bào)錯(cuò):gpg: no valid OpenPGP data found.

我在嘗試了各種解決辦法后分析發(fā)現(xiàn)铃慷,单芜,由于各種distribute發(fā)行版的不同,原來是https://download.docker.com/linux/(. /etc/os-release; echo "ID")/gpg是個(gè)無效的URL.那么該怎么辦呢?
你需要在Terminal中輸入如下命令犁柜,查看自己的發(fā)行版ID洲鸠,然后替換上述命令中的debian即可。

 . /etc/os-release
echo $ID

這時(shí)你需要把官方文檔那行命令中的debian替換成在上述命令后Terminal輸出的結(jié)果(你系統(tǒng)對應(yīng)的版本名centos馋缅,或者ubuntu扒腕,debian等)即可。由于我是Ubuntu16.04于是就直接在千米的呢命令行里直接改成了ubuntu股囊,而你需要根據(jù)自己的輸出結(jié)果進(jìn)行更改袜匿。

然后我們向本地源添加添加穩(wěn)定版Docker的倉庫源(按架構(gòu)選擇)
amd64:

   sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

armhf:

   sudo add-apt-repository \
   "deb [arch=armhf] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

s390x:

    sudo add-apt-repository \
   "deb [arch=s390x] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

(二)更啄、安裝Docker CE

sudo apt-get update
sudo apt-get install docker-ce

這個(gè)時(shí)候我們就已經(jīng)安裝好了
啟動(dòng)和停止docker的命令

sudo systemctl enable docker
sudo systemctl start docker

(三)稚疹、測試docker

為了測試一下我們的docker是否正常,我們這里使用hello world來測試一下

sudo docker run hello-world

補(bǔ)充

前面不是docker源出問題了嘛祭务,我根據(jù)各種教程進(jìn)行嘗試修復(fù)内狗,結(jié)果最后哪個(gè)源都不好使了,都崩了义锥。還出現(xiàn)了如下報(bào)錯(cuò):

Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'

看起來很多的樣子柳沙,但實(shí)際上只需要出現(xiàn)如下結(jié)果即證明安裝成功了。

....
Hello from Docker!
....

那怎么辦呢拌倍?下面三行命令可助你度過此劫:

sudo pkill -KILL appstreamcli
wget -P /tmp https://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64.deb https://launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64.deb
sudo dpkg -i /tmp/appstream_0.9.4-1ubuntu1_amd64.deb /tmp/libappstream3_0.9.4-1ubuntu1_amd64.deb\

(四).更新/卸載Docker

1,更新

sudo apt upgrade

2,卸載

sudo apt-get purge docker-ce
sudo rm -rf /var/lib/docker
sudo apt-get install nvidia-docker2

二. 安裝Docker后的一些準(zhǔn)備工作

建立 docker 用戶組

默認(rèn)情況下赂鲤,docker 命令會(huì)使用 Unix socket 與 Docker 引擎通訊。而只有 root 用戶和 docker 組的用戶才可以訪問 Docker 引擎的 Unix socket柱恤。出于安全考慮数初,一般 Linux 系統(tǒng)上不會(huì)直接使用 root 用戶。因此梗顺,更好地做法是將需要使用 docker 的用戶加入 docker 用戶組泡孩。

建立 docker 組:

$ sudo groupadd docker

將當(dāng)前用戶加入 docker 組:

$ sudo usermod -aG docker $USER

將用戶加入組后需要log out并重新登錄,這個(gè)時(shí)候運(yùn)行docker時(shí)不用在前面添加sudo寺谤,如可直接運(yùn)行docker run hello-world仑鸥。

鏡像加速器

國內(nèi)訪問 Docker Hub 有時(shí)會(huì)遇到困難,此時(shí)可以配置鏡像加速器变屁。Docker官方和國內(nèi)很多云服務(wù)商都提供了加速器服務(wù)眼俊,例如:

注冊用戶并且申請加速器,會(huì)獲得如 https://jxus37ad.mirror.aliyuncs.com 這樣的地址粟关。我們需要將其配置給 Docker 引擎泵琳。

Ubuntu 14.04、Debian 7 Wheezy

對于使用 upstart 的系統(tǒng)而言,編輯 /etc/default/docker 文件获列,在其中的 DOCKER_OPTS 中添加獲得的加速器配置 --registry-mirror=<加速器地址>谷市,如:

DOCKER_OPTS="--registry-mirror=https://jxus37ad.mirror.aliyuncs.com"

重新啟動(dòng)服務(wù)。

$ sudo service docker restart

Ubuntu 16.04击孩、Debian 8 Jessie迫悠、CentOS 7

對于使用 systemd 的系統(tǒng),用 systemctl enable docker 啟用服務(wù)后巩梢,編輯 /etc/systemd/system/multi-user.target.wants/docker.service 文件创泄,找到 ExecStart= 這一行,在這行最后添加加速器地址 --registry-mirror=<加速器地址>括蝠,如:

ExecStart=/usr/bin/dockerd --registry-mirror=https://jxus37ad.mirror.aliyuncs.com

注:對于 1.12 以前的版本鞠抑,dockerd 換成 docker daemon

重新加載配置并且重新啟動(dòng)忌警。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

Windows 10

對于使用 WINDOWS 10 的系統(tǒng)搁拙,在系統(tǒng)右下角托盤圖標(biāo)內(nèi)右鍵菜單選擇 Settings,打開配置窗口后左側(cè)導(dǎo)航菜單選擇 Docker Daemon法绵。編輯窗口內(nèi)的JSON串箕速,填寫如阿里云、DaoCloud之類的加速器地址朋譬,如:

{
  "registry-mirrors": [
    "https://sr5arhkn.mirror.aliyuncs.com",
    "http://14d216f4.m.daocloud.io"
  ],
  "insecure-registries": []
}

編輯完成盐茎,點(diǎn)擊Apply保存后Docker服務(wù)會(huì)重新啟動(dòng)。

macOS X

對于macOS的用戶徙赢,如果你使用的是Docker for Mac字柠,那配置起來很簡單。在任務(wù)欄點(diǎn)擊應(yīng)用圖標(biāo) -> Perferences... -> Daemon -> Registry mirrors狡赐。在列表中添加云服務(wù)商提供的加速器地址即可窑业。修改完成之后,點(diǎn)擊Apply & Restart按鈕阴汇,Docker就會(huì)重啟并應(yīng)用配置的鏡像地址了数冬。

檢查加速器是否生效

Linux系統(tǒng)下配置完加速器需要檢查是否生效,在命令行執(zhí)行 ps -ef | grep dockerd搀庶,如果從結(jié)果中看到了配置的 --registry-mirror 參數(shù)說明配置成功拐纱。

$ sudo ps -ef | grep dockerd
root      5346     1  0 19:03 ?        00:00:00 /usr/bin/dockerd --registry-mirror=https://jxus37ad.mirror.aliyuncs.com
$

如果Docker版本大于1.13或17.05.0-ce,也可以

$ sudo docker info|grep "Registry Mirrors" -A 1
Registry Mirrors:
 https://registry.docker-cn.com/

修改Docker默認(rèn)儲(chǔ)存位置

docker的使用過程中會(huì)產(chǎn)生大量的文件哥倔,可使用sudo docker info查看docker的基本信息秸架。

Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 1
Server Version: 17.06.2-ce
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 3
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 6e23458c129b551d5c9871e5174f6b1b7f6d1170
runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.0-21-generic
Operating System: Ubuntu 16.04 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.695GiB
Name: zhaoyong-TM1613
ID: B3ZW:3PST:A43E:XR6E:6KER:SG4C:XEHR:7ZIQ:SZ7Z:VBIK:CCAW:QP3W
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://r1daq44j.mirror.aliyuncs.com/
Live Restore Enabled: false

WARNING: No swap limit support

可以看到, 其默認(rèn)存放在/var/lib/docker目錄, 下面我們將其轉(zhuǎn)移到其他目錄<my_new_location>.

  • 停止 Docker 服務(wù)
sudo /etc/init.d/docker stop
  • 將原來默認(rèn)的/var/lib/docker備份一下,然后復(fù)制到別的位置并建立一個(gè)軟鏈接
cd /var/lib
sudo mv docker <my_new_location>
sudo ln -s <my_new_location>/docker docker
  • 啟動(dòng) Docker 服務(wù)
sudo /etc/init.d/docker start
  • 最后使用 docker info 查看更新結(jié)果:
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 1
Server Version: 17.06.2-ce
Storage Driver: aufs
 Root Dir: /home/heyu/soft/docker/
 Backing Filesystem: extfs
 Dirs: 3
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 6e23458c129b551d5c9871e5174f6b1b7f6d1170
runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.0-21-generic
Operating System: Ubuntu 16.04 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.695GiB
Name: heyu-pc
ID: B3ZW:3PST:A43E:XR6E:6KER:SG4C:XEHR:7ZIQ:SZ7Z:VBIK:CCAW:QP3W
Docker Root Dir: /home/heyu/soft/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://r1daq44j.mirror.aliyuncs.com/
Live Restore Enabled: false

WARNING: No swap limit support

其根目錄成功轉(zhuǎn)移到了/home/heyu/soft/docker咆蒿。

三.nvidia-docker2 安裝

nvdia-docker2為機(jī)器學(xué)習(xí)提供了一個(gè)隔離的開發(fā)環(huán)境东抹,能夠減少各個(gè)程序?qū)Νh(huán)境的依賴蚂子。

(一)、安裝前的需求

系統(tǒng)需求:

  • GNU/Linux x86_64 with kernel version > 3.10
  • Docker >= 1.12
  • NVIDIA GPU with Architecture > Fermi (2.1)
  • NVIDIA drivers ~= 361.93 (untested on older versions)

1.1 刪除老版本的nvidia-docker 1.0

如果你的系統(tǒng)之前安裝過nvidia-docker 1.0, 考慮到兼容性缭黔,需要將其刪除食茎。

Ubuntu distributions

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker

CentOS distributions

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo yum remove nvidia-docker

(二)、安裝nvidia-docker2

確保你的系統(tǒng)安裝了正確版本的Nvidia driver馏谨。

如果你設(shè)置了/etc/docker/daemon.json文件别渔,那么nvidia-docker2可能會(huì)覆蓋這個(gè)文件。

2.1 設(shè)置軟件源

1) Ubuntu系統(tǒng)下源的設(shè)置

Xenial x86_64 (LinuxMint 18)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

Xenial ppc64le

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/ppc64el/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

2) Debian系統(tǒng)下源的設(shè)置

Stretch x86_64

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/debian9/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

3) CentOS系統(tǒng)下源的設(shè)置

RHEL7 x86_64

curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | \
sudo tee /etc/yum.repos.d/nvidia-docker.repo

RHEL7 ppc64le

curl -s -L https://nvidia.github.io/nvidia-docker/centos7/ppc64le/nvidia-docker.repo | \
sudo tee /etc/yum.repos.d/nvidia-docker.repo

2.2 安裝

1) Ubuntu distributions:
Install the nvidia-docker2 package and reload the Docker daemon configuration:

sudo apt-get install nvidia-docker2
sudo pkill -SIGHUP dockerd

2) CentOS distributions:
Install the nvidia-docker2 package and reload the Docker daemon configuration:

sudo yum install nvidia-docker2
sudo pkill -SIGHUP dockerd

(三)惧互、使用

nvidia-docker registers a new container runtime to the Docker daemon.
You must select the nvidia runtime when using docker run:

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哎媚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子喊儡,更是在濱河造成了極大的恐慌拨与,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件艾猜,死亡現(xiàn)場離奇詭異买喧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)箩朴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門岗喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秋度,“玉大人炸庞,你說我怎么就攤上這事〖运梗” “怎么了埠居?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長事期。 經(jīng)常有香客問我滥壕,道長烟勋,這世上最難降的妖魔是什么娄周? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮骑脱,結(jié)果婚禮上唠倦,老公的妹妹穿的比我還像新娘称鳞。我一直安慰自己,他們只是感情好稠鼻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布冈止。 她就那樣靜靜地躺著,像睡著了一般候齿。 火紅的嫁衣襯著肌膚如雪熙暴。 梳的紋絲不亂的頭發(fā)上闺属,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音周霉,去河邊找鬼掂器。 笑死,一個(gè)胖子當(dāng)著我的面吹牛俱箱,可吹牛的內(nèi)容都是我干的唉匾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼匠楚,長吁一口氣:“原來是場噩夢啊……” “哼巍膘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芋簿,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤峡懈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后与斤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肪康,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年撩穿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷支。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡食寡,死狀恐怖雾狈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抵皱,我是刑警寧澤善榛,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站呻畸,受9級特大地震影響移盆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伤为,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一咒循、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绞愚,春花似錦叙甸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚂四,卻和暖如春光戈,著一層夾襖步出監(jiān)牢的瞬間哪痰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工久妆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晌杰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓筷弦,卻偏偏與公主長得像肋演,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子烂琴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容