Ubuntu系统dockergpu环境搭建
- 安装步骤
- docker常用命令
- docker相关问题解决方案
-
- 使用wsl时docker的容器无法联网
- ubuntu容器换源
- [容器update时nvidia报错NO_PUBKEY A4B469963BF863CC](#容器update时nvidia报错NO_PUBKEY A4B469963BF863CC)
- 设置pip源
安装步骤
前置安装
安装指定版本的依赖包
shell
sudo apt install libnvidia-container1=1.4.0-1 libnvidia-container-tools=1.4.0-1 nvidia-container-toolkit=1.5.1-1
安装最新的依赖包
shell
sudo apt install libnvidia-container1 libnvidia-container-tools nvidia-container-toolkit
用docker官方脚本安装Docker-ce
shell
curl https://get.docker.com | sh && sudo systemctl --now enable docker
添加稳定仓库和GPG秘钥
shell
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
更新源
shell
sudo apt-get update
安装docker
安装nvidia-docker2
shell
sudo apt-get install -y nvidia-docker2
重启docker服务
shell
sudo systemctl restart docker
阿里云镜像加速
网址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
相关命令
将用户加入到docker组中
不需要使用sudo操控docker
shell
sudo gpasswd -a 用户名 docker
查看gpus参数是否成功安装
shell
docker run --help | grep -i gpus
运行使用gpu的容器
-it表示进入镜像,后面的/bin/bash表示进入后的shell,如果不需要进入则去掉这两个
shell
sudo docker run -it --gpus all --name 容器名 镜像 /bin/bash
docker运行的常用参数
- -it: 以交互形式进入容器终端
- -d: 后台运行并返回容器id
- -p: 指定端口映射,格式为: 主机端口:容器端口
- -v: 绑定一个卷,即做容器和主机的文件映射,格式为: 主机文件:容器文件
- --restart=always: 总是重启
- --dns 8.8.8.8: 指定容器使用的DNS
- -e username="ritchie": 设置环境变量
- --env-file=[]: 从指定文件读入环境变量
- -m :设置容器使用内存最大值
- --link=[]: 添加链接到另一个容器
查看容器端口的绑定情况
shell
docker port 容器 端口
网络
查看网络详情
shell
docker network ls
创建docker网络
shell
docekr network create -d bridge(网络类型,还有overlay) 网络名
连接容器
通过--network参数可以指定要加入的网络
shell
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker常用命令
镜像
拉取镜像
shell
docker pull 镜像地址:tag
删除镜像
存在使用镜像的容器时不能删除,需要使用-f强制删除
shell
docker rmi 镜像名/镜像id
容器
创建容器
shell
# 基本命令
docker run 镜像
# 常用命令(启动容器、指定名称、挂载、指定gpu环境并进入容器)
docker run -it -v 本地路径:容器内路径 --name 容器名 --gpus all 镜像名/镜像id /bin/bash
进入容器
shell
# 开启新的终端
docker exec -it 容器id/容器名 /bin/bash
# 进入容器使用上次使用的终端
docker attach 容器id/容器名
退出容器
shell
# 退出并关闭容器
exit
# 挂起容器(退出但不关闭容器)
ctrl + p + q
启动容器
shell
docker start 容器名/容器id
关闭容器
shell
docker stop 容器名/容器id
删除容器
shell
# 删除已经关闭的容器
docker rm 容器名/容器id
# 强制删除容器
docker rm -f 容器名/容器id
docker相关问题解决方案
使用wsl时docker的容器无法联网
方案一
启动容器时,指定--dns 8.8.8.8 --dns 8.8.4.4
或者--dns=114.114.114.114
方案二
永久解决方案: 在/etc/resolv.conf中添加如下代码:
shell
nameserver 114.114.114.114
nameserver 8.8.8.8
nameserver 8.8.4.4
第一个是国内的dns,后两个是谷歌提供的dns
ubuntu容器换源
shell
sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list
sed -i "s/security.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
容器update时nvidia报错NO_PUBKEY A4B469963BF863CC
shell
echo 'deb
https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 /' > /etc/apt/sources.list.d/cuda.list
gpg --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC
gpg --export --armor A4B469963BF863CC | apt-key add -
设置pip源
shell
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple