本人在ubuntu22.04上的docker和docker-desktop上踩了较多坑,现在在这里做些总结。
docker-engine和docker-desktop
在windows平台上可以不用对两者做出较大的区别,因为下载docker-desktop时会自动下载docker-engine。
而在ubuntu上有较大的区别,最重要的是本人使用过程中docker-desktop会无法调用gpu这对深度学习而言是致命的(详细见https://github.com/docker/desktop-linux/issues/79)。并且在使用docker-desktop过程中,使用命令docker images
和命令sudo docker images
得到的结果是不同的,个人认为是在启动docker-desktop后直接使用docker
命令和使用sudo docker
命令的用户组不同。
所以对ubuntu平台下并且对gpu有使用需求的,不建议下载docker-desktop,建议直接下载docker-engine
下载docker-engine
官方下载文档:https://docs.docker.com/engine/install/ubuntu/
择取比较重要的部分:
- 卸载可能会与docker-engine冲突的包和非官方的docker软件包,以下命令卸载这些包:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- 设置
apt
docker的官方存储库
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
apt
下载官方软件包(最新的)
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 检测docker是否下载成功
sudo docker run hello-world
安装 nvidia-container-runtime
为了允许docker访问gpu资源,我们需要下载nvidia维护的一个容器运行时,nvidia官方的下载指导:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
择取比较重要的部分:
- 配置生产存储库:
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/stable/deb/nvidia-container-toolkit.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
- 从存储库更新包列表:
sudo apt-get update
- 安装 NVIDIA Container Toolkit 软件包:
sudo apt-get install -y nvidia-container-toolkit
- 验证gpu是否可用
docker run -it --rm --gpus all ubuntu nvidia-smi
正常情况下会输出本机的nvidia-smi信息
将本地用户加入docker用户组
到现在为止,想要使用docker,都必须加上sudo,为了简化,我们需要将使用的用户加入docker用户组。
依次执行以下命令:
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
但是有的人还是无法成功,这种情况可能是/var/run/docker.sock文件权限不够导致的,给此文件加上读写权限:
sudo chmod +rw /var/run/docker.sock
再次执行命令:
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
即可成功。