Docker & Nvidia-docker 镜像基础操作
简述docker & nvidia-docker感觉是深度学习的环境配置与部署简化很多,下面记录一下基础的命令,为自己后续用到查阅。在使用之前请先安装好NVIDIA驱动,CUDA以及docker & nvidia-docker的基本环境。docker & nvidia-docker 导入与导出镜像导出镜像:nvidia-docker save -o /save_p...
简述
docker & nvidia-docker感觉是深度学习的环境配置与部署简化很多,下面记录一下基础的命令,为自己后续用到查阅。在使用之前请先安装好NVIDIA驱动,CUDA以及docker & nvidia-docker的基本环境。
docker-ce & nvidia-docker 源安装
配置docker源:
更新源:
sudo apt update
启用https:
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
配置GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
配置docker稳定源:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
更新源与安装docker-ce
sudo apt update
sudo apt install -y docker-ce
测试docker是否安装成功:
sudo docker run hello-world
终端出现如下输出即为成功安装docker
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64)
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
配置nvidia-docker源:
添加nvidia-docker源:
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
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
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
安装&重启docker
sudo apt update && sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker
如果安装之后,输入nvidia-docker显示command not found的话,建议直接安装nvidia-docker2吧。
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
测试nvidia-docker是否成功安装:
可以直接去docker-hub上面pull一个带有nvidia/cuda的镜像,然后进入docker容器,通过终端运行nvidia-smi查看显卡是否成功显示即可。或者采取如下方式:
sudo docker run --gpus all nvidia/cuda:9.0-base nvidia-smi
能够看到显卡信息说明已经安装成功.
docker & nvidia-docker 导入与导出镜像
导出镜像:
nvidia-docker save -o /save_path/xxx.tar ubt1804_second:v0
导入镜像:
nvidia-docker load < xxx.tar # 对应的images保存tar(ubt1804_second:v0)
当然,docker & nvidia-docker对镜像导入导出不止这一种方式,也可以使用docker import与docker export的形式;但是,导入与导出的命令方式必须一致。
docker & nvidia-docker 容器与本机的数据相互拷贝
实际使用docker时候,肯定存在一些你想在docker容器中使用本机上面的文件或者图片之类的,这个时候有两种方式来解决:1、通过容器与数据拷贝的方式;2、刚开始启动docker镜像的时候通过-v来进行映射。
容器与本机之间的拷贝:
将容器中的文件拷贝至本机中:
docker ps
查看正在运行的容器,如下:
docker cp CONTAINER_ID:/home/xxx.whl /mnt/
举例:将容器中的/home/目录下的csdn.jpg拷贝到本机/mnt/目录下面;
docker cp 9bc4b14bd5B1:/home/csdn.jpg /mnt/
将本机中的文件拷贝至容器中:
原理同上,只是根据一下顺序即可。
docker cp /mnt/xxx.whl CONTAINER_ID:/home/
docker 修改镜像的名称
查看镜像的IMAGE_ID:
docker ps
修改镜像的名称命令如下:
docker tag IMAGE_ID(需要修改的image_id) RESPOSITORY:TAG
举例:将上图中的pcl_eigen:latest镜像修改为small/pcl_eigen:v0命令如下:
docker tag (pcl_eigen对应的IMAGE_ID) small/pcl_eigen:v0
linux下docker给普通用户添加权限
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo service docker restart
newgrp docker
如果普通用户使用docker仍然提示:get … dial unix /var/run/docker.sock权限不够,则需要修改/var/run/docker.sock的权限。使用root权限执行如下命令:
sudo chmod a+rw /var/run/docker.sock
docker 将镜像上传至docker-hub
打开终端,输入:
docker login
根据提示输入你的docker-hub用户名及其密码:
user:
passwd:
然后,可以push上传本地的docker镜像至docker-hub
docker push <user>/images
举例如下:(注意镜像push之前确保你要上传镜像的REPOSITORY有你的docker-hub用户名称,不然上传不成功,需要docker tag更改一下成为 user/REPOSITORY)
docker push smallmunich/suke_pointpillars:v0
docker 删除none的镜像
有些时候,docker images发现很多为none的镜像该如何删除呢,只需要运行下面几行命令即可:
docker stop $(docker ps -a|grep "Exited"|awk '{print $1}')
docker rm $(docker ps -a|grep "Exited"|awk '{print $1}')
docker rmi $(docker images|grep "none"|awk '{print $3}')
附加:如果你在docker-hub上面pull镜像无法有效的pull下来,可以查看一下tag的名字是否对应,然后找到对应的tag进行pull下来。
更多推荐
所有评论(0)