docker一般服务于基于cpu的应用,而如果是gpu的话,就要用到nvidia-docker,nvidia-docker是在docker上做了一层封装,通过nvidia-docker-plugin封装之后调用docker。
nvidia-docker的运行需要基于特定的硬件环境,首先需要安装nvidia driver,而docker容器并不直接支持nvidia gpu。为了解决这个问题,最早的处理办法是在容器内部,全部重新安装nvidia driver,然后通过设置相应的设备参数来启动container,然而这种办法是很脆弱的。因为宿主机的driver的版本必须完全匹配容器内的driver版本,这样导致docker image无法共享,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的设计之初。
为了使docker image能方便的使用nvidia gpu,从而产生了nvidia-docker,由它来制作nvidia driver的image,这就要求在目标机器上启动container时,确保字符设备以及驱动文件已经被挂载。
nvidia-docker-plugin是一个docker plugin,被用来帮助我们轻松部署container到gpu混合的环境下。类似一个守护进程,发现宿主机驱动文件以及gpu 设备,并且将这些挂载到来自docker守护进程的请求中。以此来支持docker gpu的使用。