因研究需要量没,要使用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/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