linux 如 Debia 或CentOS 下 Docker 安装
参考Docker Community Edition 镜像使用帮助
自动安装
Docker 提供了一个自动配置与安装的脚本,支持 Debian、RHEL、SUSE 系列及衍生系统的安装。
以下内容假定
- 您为 root 用户,或有 sudo 权限,或知道 root 密码;
- 您系统上有 curl 或 wget
export DOWNLOAD_URL="https://mirrors.bfsu.edu.cn/docker-ce"
# 如您使用 curl
curl -fsSL https://get.docker.com/ | sh
# 如您使用 wget
wget -O- https://get.docker.com/ | sh
这里抄下ubuntu的安装方法
以下内容根据 官方文档 修改而来。
如果你过去安装过 docker,先删掉:
# 如果你过去安装过 docker,先删掉:
sudo apt-get remove docker docker-engine docker.io containerd runc
# 首先安装依赖:
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
# 根据你的发行版,下面的内容有所不同。你使用的发行版:ubuntu
# 信任 Docker 的 GPG 公钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加软件仓库:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.bfsu.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 最后安装
sudo apt-get update
sudo apt-get install docker-ce
Docker 组添加用户,设置允许普通用户操作 docker
1、 首先创建docker用户组,如果docker用户组存在可以忽略
sudo groupadd docker
2、把用户添加进docker组中
sudo gpasswd -a ${USER} docker
3、重启docker
sudo service docker restart
4、如果普通用户执行docker命令,如果提示get …… dial unix /var/run/docker.sock权限不够,则修改/var/run/docker.sock权限 使用root用户执行如下命令,即可
sudo chmod a+rw /var/run/docker.sock
windows 下安装英伟达驱动 WSL下安装cuda等
WSL下建议安装最新的驱动 可以WSL 调用GPU驱动 (建议:最新版即可)
nvidia-smi #查看显卡信息 测试是否正确安装显卡
英伟达 cuda仓库 cuda不必和nvidia-smi显示的版本一致,但是建议要接近
这里是官网 cuda 11.8
# Download Installer for Linux WSL-Ubuntu 2.0 x86_64
# 这里是 run 文件的 安装代码
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
# 这里是 deb文件安装代码
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
安装完成后
这里还不可以使用nvcc -V
以下为设置环境变量
# nvcc -V 的设置
sudo vim .bashrc
# 在 .bashrc 最后添加以下内容
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
#此处 11.8 和你安装的cuda版本一致
# 按下 ESC 后 输入 :wq 确认
source .bashrc
#确认更新
# 输入nvcc -V查看cuda
nvcc -V
测试 检查是否可以直接调用GPU
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Thu Nov 24 07:26:40 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.56.05 Driver Version: 522.25 CUDA Version: 11.8 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| 48% 28C P8 7W / 170W | 32MiB / 12288MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 23 G /Xwayland N/A |
| 0 N/A N/A 34 G /Xwayland N/A |
| 0 N/A N/A 34 G /Xwayland N/A |
+-----------------------------------------------------------------------------+
--gpus all 这里是调用GPU 必须的代码
补充内容
/etc/docker/daemon.json 参数详解
{
"authorization-plugins": [],
"data-root": "",
#Docker运行时使用的根路径,根路径下的内容稍后介绍,默认/var/lib/docker
"dns": [],
#设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看
"dns-opts": [],
#容器 /etc/resolv.conf 文件,其他设置
"dns-search": [],
#设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜索host.example.com。注意:如果不设置,Docker 会默认用主机上的 /etc/resolv.conf来配置容器。
"exec-opts": [],
"exec-root": "",
"experimental": false,
"features": {},
"storage-driver": "",
"storage-opts": [],
"labels": [],
#docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
"live-restore": true,
"log-driver": "",
"log-opts": {},
"mtu": 0,
"pidfile": "",
#Docker守护进程的PID文件
"cluster-store": "",
"cluster-store-opts": {},
"cluster-advertise": "",
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"default-shm-size": "64M",
"shutdown-timeout": 15,
"debug": true,
#启用debug的模式,启用后,可以看到很多的启动信息。默认false
"hosts": [],
#设置容器hosts
"log-level": "",
"tls": true,
#默认 false, 启动TLS认证开关
"tlscacert": "",
#默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
"tlscert": "",
#默认 ~/.docker/cert.pem ,TLS的certificate文件路径
"tlskey": "",
#默认~/.docker/key.pem,TLS的key文件路径
"tlsverify": true,
#默认false,使用TLS并做后台进程与客户端通讯的验证
"tls": true,
"tlsverify": true,
"tlscacert": "",
"tlscert": "",
"tlskey": "",
"swarm-default-advertise-addr": "",
"api-cors-header": "",
"selinux-enabled": false,
#默认 false,启用selinux支持
"userns-remap": "",
"group": "",
#Unix套接字的属组,仅指/var/run/docker.sock
"cgroup-parent": "",
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
},
"init": false,
"init-path": "/usr/libexec/docker-init",
"ipv6": false,
"iptables": false,
"ip-forward": false,
#默认true, 启用 net.ipv4.ip_forward ,进入容器后使用sysctl -a|grepnet.ipv4.ip_forward查看
"ip-masq": false,
"userland-proxy": false,
"userland-proxy-path": "/usr/libexec/docker-proxy",
"ip": "0.0.0.0",
"bridge": "",
"bip": "",
"fixed-cidr": "",
"fixed-cidr-v6": "",
"default-gateway": "",
"default-gateway-v6": "",
"icc": false,
"raw-logs": false,
"allow-nondistributable-artifacts": [],
"registry-mirrors": [],
#镜像加速的地址,增加后在 docker info中可查看。
"seccomp-profile": "",
"insecure-registries": [],
#配置docker的私库地址
"no-new-privileges": false,
"default-runtime": "runc",
"oom-score-adjust": -500,
"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
"runtimes": {
"cc-runtime": {
"path": "/usr/bin/cc-runtime"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
},
"default-address-pools":[{"base":"172.80.0.0/16","size":24},
{"base":"172.90.0.0/16","size":24}]
}
设置国内镜像源代理
在 /etc/docker/daemon.json 文件 添加以下内容
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn/",
"http://hub-mirror.c.163.com"
]
安装nvidia-docker
# Setup the package repository and the GPG key
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Install the nvidia-docker2 package (and dependencies) after updating the package listing
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
# Restart the Docker daemon to complete the installation after setting the default runtime
$ sudo systemctl restart docker
# test
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
报错及解决
1、gpg: 找不到有效的 OpenPGP数据
可能原因:不能访问 https://nvidia.github.io/libnvidia-container/gpgkey
解决:打开此网址,会自动下载 gpgkey 文件,之后 cd 到下载路径下运行
sudo apt-key add gpgkey
成功后会输出 OK
2、E: 无法定位软件包 nvidia-docker2
原因:
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
在这条命令中读取 https://nvidia.github.io/libnvidia-container/ubuntu20.04/libnvidia-container.list 这个网址内的信息并写到 /etc/apt/sources.list.d/nvidia-docker.list 文件中。查看本地相应文件,发现该文件为空,说明在写入文件时出现了问题,可能与文件权限有关,从而影响了下载源的更新。
解决:访问上述地址,复制网址中的文本,通过 sudo vim 写入到本地的相应文件。
注意:
1、$distribution 需要替换为相应系统版本号,如上面链接中的 ubuntu20.04。
2、对于 1.6.0 之前的 NVIDIA Container Toolkit 版本,应使用 nvidia-docker 存储库而不是上面的 libnvidia-container 存储库。
之后按照官方的方法安装和测试。
# Install the nvidia-docker2 package (and dependencies) after updating the package listing
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
# Restart the Docker daemon to complete the installation after setting the default runtime
$ sudo systemctl restart docker
# test
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
# 最后一行有 --gpus all 才能正确调用 GPU驱动