基于docker的caffe环境搭建与使用示例
2016-11-10 20:18
666 查看
0. 引言
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。因此,Docker给应用提供了一个从开发到上线均一致的代码环境,让代码的流水线变得简单不少。以下是基于docker的caffe环境搭建过程,并给出使用示例。
1. 安装Docker
Docker的安装可以参考官方文档:https://docs.docker.com/engine/installation/linux/ubuntulinux/
本文安装的时候选择了Ubuntu 14.04的版本。
2. 基于Docker安装Caffe
在caffe官网上已经提供了创建caffe镜像所需的Dockerfile,并且在docker hub上也能找到:https://hub.docker.com/r/elezar/caffe/。1) 通过以下命令即可在本地创建caffe镜像:
$ docker pull elezar/caffe:cpu
注意,如果要创建GPU版本,则将上述命令中的cpu改成gpu。
2) 下载完成后,测试是否安装正确。
输入:
$ docker run -ti elezar/caffe:cpu caffe --version
会看到如下输出,说明安装成功:
libdc1394 error: Failed to initialize libdc1394 caffe version 1.0.0-rc3
也可以输入:
$ docker images
可以看到本地多了一个caffe镜像。
3. Docker下caffe的使用
3.1 在交互模式下运行caffe容器:
$ sudo docker run -t -i elezar/caffe:cpu /bin/bash
docker run 运行一个容器
-t 分配一个(伪)tty (link is external)
-i 交互模式 (so we can interact with it)
elezar/caffe:cpu 使用 elezar/caffe:cpu 镜像创建容器
/bin/bash 运行命令 bash shell
这时我们就可以发现我们已经进入了刚刚创建的容器中,hostname已经变成root@c5f24e953610,其中@后面的这一串数字是当前容器的ID。搭建好的caffe文件夹在/opt/caffe/目录下:
然后就可以正常使用了。
3.2 以mnist为例,获取mnist数据:
$ cd /opt/caffe/data/mnist/ $ ./get_mnist.sh
可以看到当前目录下生成了新的mnist数据:
是不是和直接在linux系统上使用caffe完全一样呢?是的,通过交互模式的设定,在docker的容器中使用caffe就和直接在linux系统上一样一样滴~~当然,还是有不一样的地方,请看下回分解 ↓↓↓
3.3 容器中数据如何保存
按ctrl+D 或 exit 退出当前容器。退出后,如果你想重新使用之前的容器,可以通过以下命令重启,回到之前的状态:
$ docker start container_ID $ docker attach container_ID
另外要注意,如果你新运行caffe镜像的一个容器,你会发现在之前那个容器中生成的数据都没有啦!
要理解这一点,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。(在Docker中,只读层及在顶部的读写层的组合被称为Union File System,联合文件系统)。
那么如何保存这种修改呢?有两种方式,一种是通过docker commit来扩展一个新的image,另一种是通过docker volume,绕过默认的联合文件系统,将更改的文件以正常的文件或者目录的形式保存于宿主机上。
3.3.1 docker commit
$ docker commit c5f24e953610 mycaffe
其中c5f24e953610是我们之前所使用容器的ID,可以通过docker ps -a查看;mycaffe是新生成的镜像的名称。
这时候我们再使用docker images命令查看现有镜像,发现除了原始的elezar/caffe外,还多了一个名为mycaffe的镜像,即为我们刚创建的镜像:
如果我们现在为mycaffe创建一个容器,并查看data/mnist/目录,就会发现之前生成的mnist数据存在了,说明容器中的数据被我们保存下来了:
$ docker run -ti mycaffe /bin/bash $ cd /opt/caffe/data/mnist/ $ ls
3.3.2 docker Volume
要实现主机和容器之间的数据交互,需要通过docker Volume来完成。首先在主机中创建一个用于存储数据的文件夹,并在其中新增一个文件作为测试:
$ mkdir dockerData $ cd dockerData $ touch test-file
然后将该文件夹挂载到新的容器中,在运行时使用-v来声明Volume:
$ docker run -ti -v /home/elaine/dockerData:/dockerData elezar/caffe:cpu
以上命令会将主机中的/home/elaine/dockerData目录挂载到容器中的/dockerData目录下,这样我们就可以在容器中看到这个目录了,并且可以看到我们事先存放的test-file:
我们可以在主机上直接操作该目录,比如在主机上再增加一个文件,我们也可以马上在容器中看到变化:
我们也可以在容器中给这个目录添加数据,如caffe训练后的model等,任何在/dockerData路径的文件都可以在主机中访问到。
3.4 附:Docker删除指令
//删除指定容器 $ docker rm container_ID/name //删除所有已经停止的容器 $ docker rm $(docker ps -a -q) //删除指定镜像 $ docker rmi image_name
reference:
[1] Docker Docs[2] 非常详细的 Docker 学习笔记
[3] 深入理解Docker Volume(一)
[4] 深入理解Docker Volume(二)
相关文章推荐
- 基于docker的caffe环境搭建与使用示例(根据自己的情况稍作修改)
- 基于docker的caffe环境搭建与使用示例
- 基于docker的caffe环境搭建与使用示例
- Ubuntu 16.04安装使用--Ubuntu16.04下基于Docker的Caffe-GPU版本环境搭建总结
- Ubuntu16.04下基于Docker的Caffe-GPU版本环境搭建总结
- 【云计算虚拟化】基于docker的caffe环境搭建
- 基于docker的caffe环境搭建
- 基于docker的caffe环境搭建方法
- Docker - 基于NVIDIA-Docker的Caffe-GPU环境搭建
- 搭建基于MinGW平台的《OpenGL蓝皮书(OpenGL SuperBibe 5th)》示例代码编译环境
- 使用Macallan Mail Solution搭建基于windows环境下的邮件服务器
- 在Centos 7中使用 Docker搭建MySQL异地双向复制环境
- 使用 Docker 搭建 Java Web 运行环境
- DWCS6搭建jsp开发环境及使用ajax实现用户注册(基于文件)
- 转:使用 Docker 搭建 Java Web 运行环境
- 一步一步教你搭建基于docker的MongoDB复制集群环境
- 使用yo angular-fullstack 开发基于node angular mongo程序的环境搭建
- 使用 Docker 搭建 Java Web 运行环境
- 搭建基于Docker的PHP开发环境的详细教程