# nvidia-docker安装部署以及操作手册
前言
docker和nvidia-docker的区别
由于我们深度学习需要用到GPU,使用docker时,需要映射设备等等,docker容器对宿主机的依赖就会很多也就失去了便捷,并不能让我们很舒服的迁移环境,nvidia-docker则很好的封装了这些,只需要容器内的cuda版本和宿主机相同就行(这个要求很低了,而且这个要求现在也基本可以通过docker hub上别人做好的带有各种cuda版本的镜像来满足,所以几乎无要求)
其实nvidia-docker只是run 和 exec命令和docker执行不同,其余的和docker执行的一模一样
## 1.卸载 nvidia-docker 1.0 及其他GPU容器
```
$ 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 -y nvidia-docker
```
## 2. 添加package repositories
```
$curl -s -L https://nvidia.github.io/libnvidia-container/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
$ sudo apt-get update
```
## 3. 安装 nvidia-docker2
```
$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd
```
## 4. 测试安装,查看显卡使用情况
```
$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
```
## 5.启动nvidia-docker服务
```
$ systemctl start nvidia-docker
$ systemctl status nvidia-docker
```
## 6.指定gpu启动
```
$ NV_GPU=1 nvidia-docker run -v /matt/docker:/mnt $container --rm -ti matt/docker bash
```
## 7.容器改名
```
$ sudo nvidia-docker tag A B (将A改名为B)
```
## 8.进入容器
```
$ docker exec -it 容器名 /bin/bash
```
## 9.将容器保存为一个镜像
```
$ docker commit containerId demo:v1.0 (新的镜像名称为demo,版本为v0.2)
```
## 10.使用镜像(进入镜像)
```
$ docker run -it demo:v1.0 bash
```
## 11.docker中做端口映射
```
$ docker run -it -d -p 0.0.0.0:5000 demo:v1.0 bash
```
例:将容器的80端口映射到宿主机的8000端口上:
```
docker run -itd -p 8000:80 demo:v1.0 /bin/bash
```
## 12.将宿主机的文件拷贝到容器中
```
$ docker cp [-a] libcudart.so.9.0 clever_hawking:/usr/lib(clever_hawking是容器名,-a 是以打包的方式传)
```
## 13.将容器中的文件拷贝到宿主机中
```
$ docker cp mycontainer:/opt/testnew/file.txt /opt/test/
```
## 14.docker容器查看ip地址
```
$ apt-get install net-tools -y 安装net-tools
$ ifconfig 然后利用ifconfig
```
## 15.容器管理
```
docker ps : 列出正在运行的容器
docker ps -a: 列出正在运行的和已经停止的容器
docker rm 容器id:删除指定容器
docker rm $(docker ps -a -q):删除所有已经停止的容器
docker stop 容器id:停止运行指定容器
docker start 容器id:启动指定容器
sudo docker exec -it 容器名称 /bin/bash 进入到正在运行的容器中
```
## 16.镜像管理
```
docker images :列出宿主机存在的所有镜像
docker rmi 镜像id:删除指定镜像
docker rmi -f 镜像id:强制删除指定镜像
docker build -t 镜像名:版本 路径:根据路径下的Dockerfile文件创建一个镜像
注:创建时会将指定路径下的所有文件都先上传,所以最好将Dockerfile文件放在单独的目录下。
```
## 17.导入镜像
```
docker load : 导入使用 docker save 命令导出的镜像。
例:docker load < line.tar
```