nvidia-docker-plugin工作原理是是其提供了一个API
[root@A01-R06-I184-22 ~]# curl -s :3476/v1.0/docker/cli --volume-driver=nvidia-docker --volume=nvidia_driver_352.39:/usr/local/nvidia:ro --device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia0 --device=/dev/nvidia1 --device=/dev/nvidia2 --device=/dev/nvidia3可以看到curl -s :3476/v1.0/docker/cli命令实际是提供了docker run时候的一些必要参数。其中包括把gpu设备映射进入容器中的部分(--device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia0 --device=/dev/nvidia1 --device=/dev/nvidia2 --device=/dev/nvidia3),还包括了将nvidia_driver_352.39存储映射进入容器的部分。
接下来我们对于nvidia_driver_352.39进行分析
[root@A01-R06-I184-22 ~]# docker volume ls DRIVER VOLUME NAME nvidia-docker nvidia_driver_352.39 [root@A01-R06-I184-22 ~]# docker volume inspect nvidia_driver_352.39 [ { "Name": "nvidia_driver_352.39", "Driver": "nvidia-docker", "Mountpoint": "/var/lib/nvidia-docker/volumes/nvidia_driver/352.39" } ]可以看到该存储其实只是一个文件夹。对文件夹/var/lib/nvidia-docker/volumes/nvidia_driver/352.39/进行分析
[root@A01-R06-I184-22 ~]# tree -L 3 /var/lib/nvidia-docker/volumes/nvidia_driver/352.39/ /var/lib/nvidia-docker/volumes/nvidia_driver/352.39/ ├── bin │ ├── nvidia-cuda-mps-control │ ├── nvidia-cuda-mps-server │ ├── nvidia-debugdump │ ├── nvidia-persistenced │ └── nvidia-smi ├── lib │ ├── libcuda.so -> libcuda.so.352.39 │ ├── libcuda.so.1 -> libcuda.so.352.39 │ ├── libcuda.so.352.39 │ ├── libGL.so.1 -> libGL.so.352.39 │ ├── libGL.so.352.39 │ ├── libnvcuvid.so.1 -> libnvcuvid.so.352.39 │ ├── libnvcuvid.so.352.39 │ ├── libnvidia-compiler.so.352.39 │ ├── libnvidia-eglcore.so.352.39 │ ├── libnvidia-encode.so.1 -> libnvidia-encode.so.352.39 │ ├── libnvidia-encode.so.352.39 │ ├── libnvidia-fbc.so.1 -> libnvidia-fbc.so.352.39 │ ├── libnvidia-fbc.so.352.39 │ ├── libnvidia-glcore.so.352.39 │ ├── libnvidia-glsi.so.352.39 │ ├── libnvidia-ifr.so.1 -> libnvidia-ifr.so.352.39 │ ├── libnvidia-ifr.so.352.39 │ ├── libnvidia-ml.so.1 -> libnvidia-ml.so.352.39 │ ├── libnvidia-ml.so.352.39 │ ├── libnvidia-opencl.so.1 -> libnvidia-opencl.so.352.39 │ ├── libnvidia-opencl.so.352.39 │ ├── libvdpau_nvidia.so.1 -> libvdpau_nvidia.so.352.39 │ └── libvdpau_nvidia.so.352.39 └── lib64 ├── libcuda.so -> libcuda.so.352.39 ├── libcuda.so.1 -> libcuda.so.352.39 ├── libcuda.so.352.39 ├── libGL.so.1 -> libGL.so.352.39 ├── libGL.so.352.39 ├── libnvcuvid.so.1 -> libnvcuvid.so.352.39 ├── libnvcuvid.so.352.39 ├── libnvidia-compiler.so.352.39 ├── libnvidia-eglcore.so.352.39 ├── libnvidia-encode.so.1 -> libnvidia-encode.so.352.39 ├── libnvidia-encode.so.352.39 ├── libnvidia-fbc.so.1 -> libnvidia-fbc.so.352.39 ├── libnvidia-fbc.so.352.39 ├── libnvidia-glcore.so.352.39 ├── libnvidia-glsi.so.352.39 ├── libnvidia-ifr.so.1 -> libnvidia-ifr.so.352.39 ├── libnvidia-ifr.so.352.39 ├── libnvidia-ml.so.1 -> libnvidia-ml.so.352.39 ├── libnvidia-ml.so.352.39 ├── libnvidia-opencl.so.1 -> libnvidia-opencl.so.352.39 ├── libnvidia-opencl.so.352.39 ├── libnvidia-tls.so.352.39 ├── libvdpau_nvidia.so.1 -> libvdpau_nvidia.so.352.39 └── libvdpau_nvidia.so.352.39 3 directories, 52 files