能在docker中运行使用GPU的程序,首先必须安装了docker和nvidia-docker,具体安装方法参考前两篇文章.
本文使用Dockerfile的方式创建镜像
nvidia docker镜像源地址为https://hub.docker.com/r/nvidia/cuda,可以根据自己的需要拉取镜像源,本文使用的镜像源为ubuntu14.04+cuda8.0+cudnn7.0
1 编写Dockerfile
Dockerfile文件内容为:
#拉取镜像源
FROM nvidia/cuda:8.0-cudnn7-runtime-ubuntu14.04
#指定镜像维护人,非必须项
MAINTAINER Ding Yu
#将自己的应用程序拷贝到容器中,本文拷贝了自己实现的人脸识别程序,即将本地整个FaceRecognition/目录
#(注:宿主机中拷贝的目录必须跟Dockerfile文件所在目录或子目录下,而不能在宿主机的其他目录下)
#中的所有内容拷贝到容器的/tmp目录下
COPY FaceRecognition/ /tmp/
#设置容器使用中文字符集,这个主要是解决docker中中文乱码的问题,因为我的人脸识别程序需要在图片上显示人的中文名
ENV LANG C.UTF-8
#开放容器的80端口
EXPOSE 80
2 编译并生成镜像
sudo docker build -t="test/face" .
注:最后面的.代表在当前目录下查找Dockerfile
3 查看生成的docker镜像
sudo docker images
可以看到:
REPOSITORY TAG IMAGE ID CREATED SIZE
test/face latest 7e4526397e5a 3 hours ago 2.13GB
nvidia/cuda 8.0-cudnn7-runtime-ubuntu14.04 d5491c845e53 2 months ago 1.02GB
4 创建并运行docker容器
sudo docker run --runtime=nvidia -it test/face
5 此时进入到容器中,在容器的/tmp目录下就是我们拷贝过来的文件
cd tmp/
ls
6 退出容器
exit
7 查看已创建的容器
sudo docker ps -a
可以看到:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea8ce13b3a84 test/face "/bin/bash" 3 hours ago Exited (0) 2 hours ago hungry_hodgkin
8 再次进入该容器
sudo docker start ea8ce13b3a84
sudo docker attach ea8ce13b3a84