Docker & Nvidia-docker 镜像基础操作

简述

  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下来。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值