Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
搜狗百科
初次看见这一段话其实可能不太好理解,什么是应用容器引擎?什么是虚拟化?等等问题都会困扰到我们。对于这种不太好理解的抽象概念。我们得结合具体的实例来进行讲解,我们来看这么一个场景:
在一个做计算机视觉研究的小组里,大家都有一台自己的用于平时工作的台式机,同时组里还有一台服务器。这台服务器上有这个小组的所有GPU计算资源。平时大家的工作模式是:在自己的台式机上写好自己的算法,调试好之后放到服务器上利用服务器的GPU去运行。
这样乍一看好像没什么问题,但是细细一想你就会发现这么模式的弊端。假设该小组有A、B、C、D四个人。A使用的框架是Pytorch,B使用的是tensorflow,C也同样是Pytorch,但是与A的版本不一样,D用的是caffe。那么问题来了,假设服务器上只有pytorch这个框架,B与D就要自己去安装相应的环境。当然这不是最重要的,也不是docker主要想解决的问题。最要命的在假设A只能在他目前所在的Pytorch版本上去运行,而C也是同样如此。那么两个人每次使用服务器的时候都要去重新装一遍对应版本的pytorch,这样岂不是很麻烦?
所以说docker就出现了,它使得一台服务器上可以装自己的环境(镜像)而与其它人的环境互补干扰。想要运行程序的时候,启动这个镜像就可以了。而且这个镜像是可以保存在硬盘里的(就是一个压缩文件),当你想在另一台服务器上,运行你写的算法的时候,你只要将你这个镜像导入到当前服务器的docker中(也就是前面所提到的让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器上),并启动它,就可以得到与你目前服务器一模一样的环境而不必担心各种依赖文件的版本问题。我们来看下图就能理解docker的运行机制了:
可以看到,你可以在一个docker镜像文件里面再装一个操作系统,然后以此为基础搭建你的深度学习环境。而最终算法运行所需要的GPU资源等硬件资源则从宿主机获取。实际上,只要你想,你甚至可以在docker镜像文件里面再装docker。
了解完什么是docker之后呢就可以进行docker的安装了,具体的安装教程可以参考:
https://www.runoob.com/docker/docker-tutorial.html
docker安装
以windows为例,docker安装好之后,可以在cmd命令行中,输入docker -v查看当前docker版本,不报错即为安装成功:
1)拉取基础的操作系统镜像
关键命令:docker pull
- 具体操作:docker pull nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04
我们可以看到最下面这一行的镜像就是我们所拉取的镜像。这个镜像中已经装好了ubuntu16.04的操作系统以及要用GPU所必须的CUDA和CuDNN。
2)安装需要版本的anaconda
在上一步的镜像拉取中,我们的镜像已经有了操作系统 。现在我们进入这个镜像也就会进入这个操作系统。进入之后就和你在正常ubuntu系统中安装anaconda没什么两样。
关键命令:docker run -it -v E:/CHEN/uplaod:/workspace nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04
上述命令解释一下:run表示运行指定镜像文件, -it表示以交互式的环境运行,-it是run的属性。-v表示将宿主机中的一个文件夹挂载到该镜像中,这里将宿主机E盘中的upload挂载到了镜像运行后的一个虚拟的文件夹workspace中。至于最后,就是你要运行的镜像的名称。命令运行成功后,会进入该镜像。可以看到该镜像已经安装了ubuntu,所以后面一行就已经从宿主机的命令行转到了ubuntu中了。
那么接下来的anaconda的安装就简单了。将anaconda的安装文件下载到upload中,这样对应镜像文件中的workspace文件夹内也相当于有了这个文件。然后cd /workspace后,执行bash anaconda的文件名即可安装。
安装完成之后对该镜像进行保存:
docker commit 镜像所在容器id 给保存的镜像取的名字以及版本号
例如这里我们可以:
docker commit 6700a3d7a2a2 test/anaconda:v0
同样,使用docker images命令可以看到我们保存之后的镜像文件
3)安装需要版本的pytorch安装pytorch就更简单了, docker run 命令进入镜像之后,直接使用conda命令安装就行了,不过同样,安装完成之后要记得 docker commit 三、将自己的程序与依赖项放进这个镜像中运行 这个实际上在run命令后加-v,将程序所在的宿主机文件夹挂载到镜像中的一个虚拟文件夹就可以了。然后进入这个虚拟文件夹,平时怎么在ubuntu上运行这个程序的还怎么运行这个程序 四、将自己制作的docker上传到云上传到云之后呢,可以随时随地的将你制作的镜像pull下来。并在本地运行。具体操作推荐这个博客: csdn搜索:将docker镜像推送到阿里云镜像仓库
阿柴提示
以上若有你需要而查不到或有疑惑的项目,
请联系小编为你解答
Ps:欢迎关注公众号,获取更多深度学习、计算机视觉、图像分割领域资料: