约莫两周前,实验室的GPU服务器突然宕机。最初体现在SSH无法连接,经过简单随意的排查,发现网口灯闪烁频率不对,遂认为实验室网络不稳定,等网络恢复正常就好了。期间几个同学问我服务器是不是坏了,等了大约一周,就带着显示屏一探究竟。结果呢,服务器都开不了机,甚至....BIOS都进不去.....本着不接锅的原则,联系了售后.....售后检查后说只是系统坏了,重装即可。
系统重装后让我想起了原本服务器混乱的环境,每个用户都会安装自己的python,环境也都会自己配置,这就导致服务器的空间利用率很低;此外,每个用户都拥有sudo权限,也导致大家在服务器上存放的资料是很不安全的。基于上述问题,决定为服务器部署docker环境,新建用户全都改为普通用户,不再拥有sudo权限,各用户的工作目录添加适当的权限,确保隐私安全。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(源自百度百科)
按照我个人的理解,docker是一个大的虚拟机环境,其中包含很多的虚拟机镜像,而这些镜像会包含已经配置好的环境;容器则是基于这些镜像,实例化得到的虚拟机,在某一个容器内可以随机修改环境配置,而不会噪声环境之间的相互干扰。
由于要使用本机的GPU资源,因此,安装docker之后还需要安装nvidia-docker;而且,在本地也要预先安装GPU驱动、cuda、cuDNN等。这些安装教程非常多且详细,在此给出链接不在赘述。
Ubuntu 18.04 (测试可用)
[笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程
Ubuntu 16.04 (未测试)
https://blog.csdn.net/qq_41493990/article/details/81624419新建docker镜像主要有两种方式,一种是通过Dockerfile的方式来构建,由于笔者也是docker新手,并没有掌握这种镜像构建方式;第二是基于DockerHub上的开源镜像进行修改,构建适用于自己的镜像。以下仅介绍第二种方式。
以pytorch为例,使用docker search pytorch在DockerHub上搜索公开的镜像;

在此,选用STAR最多的pytorch/pytorch,可通过docker pull pytorch/pytorch来拉取镜像。其中,还可以通过TAG标签来细化要拉取的镜像,默认拉取latest镜像,可在https://hub.docker.com/网站中具体查询,经过查询,pytorch/pytorch镜像有如下TAG:

考虑本地cuda版本等情况,我最终使用了1.2-cuda10.0-cudnn7-runtime.
镜像拉取后,可在本地使用docker images 查看所有的镜像

初次使用docker时,要新建属于自己的容器,之后所有的训练任务可在该容器内完成,新建容器的常用指令为:
nvidia-docker run -it -v DIR_LOCAL:DIR_CON -p PORT_LOCAL:PORT_CON --name NAME IMAGE其中,-it表示使用交互式界面新建容器,即工作在/bash/bin;-v表示将本地路径映射至容器中的相应路径,DIR_LOCAL表示本地路径,DIR_CON表示容器内的路径;-p表示将本地端口与容器端口建立映射,深度学习中,在使用tensorboard时会用到;--name表示为自己的容器取名字,方便下次使用该容器时使用NAME来调回,而不需要使用ID;IMAGE表示镜像名字,同样可以使用TAG来具体化。(由于需要使用GPU资源,因此使用nvidia-docker新建容器,而不是docker)
若现查看已经存在的容器,可使用命令
docker ps -a可列出所有的容器(包含已停止工作的),去掉-a仅仅显示正处于工作状态的容器。
退出容器有两种方式,其一是退出后容器也停止工作(docker ps查看不到),通过键入exit或者使用快捷键Ctrl+D实现;其二是退出后容器会在后台继续工作(docker ps可以看得到),通过快捷键Ctrl+P+Q实现。
对于已经停止工作的容器,首先要恢复其工作状态
docker restart (NAME or ID)正在工作的容器则无需此步骤。接下来,返回容器
docker attach (NAME or ID)使容器停止工作
docker stop (NAME or ID)删除容器
docker rm (NAME or ID)删除镜像
docker rmi (IMAGE or IMAGE_ID)上述的命令,很多都需要授予sudo权限才可以使用。但是,普通用户不具备sudo权限的话,就无法使用,可以通过新建用户组的方式来解决。
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用
以上,就是docker的基本搭建和使用方式~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3137509/ ,如需转载,请注明出处,否则将追究法律责任。