docker常用操作命令(及与caffe相关的操作)

Docker的详细教程见Docker官网,本文主要记录常用的几组命令

1.Ubuntu14.04下Docker的安装

本人在ubutnu14.04下进行了两次docker安装,两次使用了不同的安装方法
(1)一句命令安装
sudo apt-get intasll docker.io
注1:apt-get是ubuntu安装软件的管理工具
注2:这里的“安装docker”其实就是安装Docker Engine)

(2)利用docker官网的linux-docker安装教程进行,具体地:
① 检查ubutnu是否安装了curl工具
which curl
如果发现curl工具没有安装,那么,需要安装curl工具

sudo apt-get update
sudo apt-get install curl

② 获取最新的docker package

curl -fsSL https://get.docker.com/ | sh

2.确认docker engine是否安装成功

# Check that you have a working install
sudo docker info

注:第二次使用docker时遇到了一个问题,检测daocker是否安装成功,返回的结果时已经成功,但却出现了如下的错误提示:

Cannot connect to the Docker daemon. Is ‘docker -d’ running on this host?

网上的解决方案特别多,试了其中一种,解决了该问题:并未启动docker的服务,使用下面的方法重新启动docek

sudo service docker stop
sudo service docker start

3. dockerhub下载新的镜像

3.1 直接在dockerhub上pull pre-built image

sudo docker pull tingtinglu/docker

注:tingtinglu/docker是dockerhub上的pre-built image的名字

3.2 下载dockerfile文件,在本机进行built

即:build your own image

首先是获取dockerfile,名称就是dockerfile

  • 利用terminal的cd命令进入到dockerfile所在的文件夹

  • 执行命令

docker build -t ImageName

注:ImageName是利用dockerfile生成的image的name(自行设置),例如,caffe

另外需要注意的一个问题:

有时候,已经得到了一个image,但需要往该image中做新的更改,例如,想要在docker的opt路径下添加一个新的路径workspace,此时,可以通过dockerfile进行,方法如下:

① 新建一个dockerfile,添加如下内容

RUN mkdir /opt/workspace

② 利用terminal进入该dockerfile所在路径,然后,built该dockerfile,即执行如下命令:

docker build -t ImageNameOld

一定要注意,这里的ImageNameOld是你想要添加该变化的那个image的名字

4. 利用下载的镜像生成容器

sudo docker run -it --rm -p 8888:8888 -v `pwd`/workspace:/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock

注1:如下命令是将docker中的jupyter的8888接口与本机的8888接口关联

p 8888:8888

注2:如下命令

v `pwd`/workspace:/opt/workspace

或者:

利用terminel进入到本机的workspace路径下,然后: -v ¨$(pwd):/opt/workspace¨

是将当前路径下(由`pwd`)的workspaace文件夹映射到docker中的opt路径下的的workspace文件夹;
这样,docker下的opt/workspace就指向来本机的`pwd`/workspace文件夹;

docker常用操作命令(及与caffe相关的操作)_第1张图片

此时,再进入docker后,docker的/opt/workspace/中的内容就变为的本机的workspace中的内容;
可以认为,无论原来docker的/opt/workspace中是否由内容,现在该workspace的内容都被本机的workspace覆盖来,即docker的opt/workspace此时不再指向daocker中的opt/workspace,而只是指向本机的workspace文件夹

注3:有时,docker可能不能上网,那么,可以加入--net=host

sudo docker run -it --rm -p 8888:8888 --net=host -v `pwd`/workspace:/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock

5. 查看本机的docker images

sudo docker images

会得到本机的所有images的信息

docker常用操作命令(及与caffe相关的操作)_第2张图片

6. 查看正在运行的container

sudo docker ps

显示的信息如下:

Container Id IMAGE command Created status ports names
container的ID 生成该container的image的名称 生成该container的时间 该container的状态 ContainerName(自动分配)

7. 以bash模式进入正在运行的docker

sudo docker exec -it containerName

8. 将一个容器保存为image

如果对docker的更改不是安装了jupyter这样的软件,而只是安装了一些package,那么,保存新的镜像只需要:

sudo docker commit containerID newImageName

containerID为要保存的容器的ID,newImageName为新image的名字
例如:ting/caffe:version1这样的名字,其中,version1为新容器的flag,可以用来标识新image的版本信息

9. docker下如何安装jupyter

该过程与直接利用dockerfile相比,不是很方便,但也是一种方法,所以记录在此(有了上面提到的dockerfile方法,完全可以抛弃本方法)

9.1 安装docker

9.2 pull一个caffe的image

直接在docekr hub中搜索caffe,下载image kaixhin/caffe(Ubuntu Core 14.04 + Caffe. Includes Python interface.)
sudo docker pull kaixhin/caffe

9.3 利用该image运行一个container

sudo docker run -it kaixhin/caffe bash

9.4 在该container中安装jupyter notebook

pip install jupyter notebookyter

notebook是jupyter的名字

9.5 commit安装好jupyter的image,重新命名

sudo docker commit --change='CMD jupyter notebook' serene_carson tingtingNew
  • serene_carson:正在运行的container的名字
  • tingtingNew:想要保存的新的image的名字

9.6 利用新的image生成新的container

sudo docker run -it --net=host -v /home/tingting/Dropbox/code/craterDetection/docker:/root/workspace tingtingNew

注:tingtingNew为刚刚安装了jupyter notebook的image

9.7 打开jupyter

利用浏览器输入网址:localhost:8888

注:不知道为什么,本机安装的jupyter地址没法获取,所以这里使用了localhost

如何获取localhost的地址?
打开一个新的terminal,查看container的地址:

sudo docker inspect clever_bohr | grep IPAddress

这里的clever_bohr为该正在运行的container的名字,例子如下


在浏览器中输入:172.17.0.6:8888

如何对prototxt文件绘制网络的结构图

pip install pydotplus(需要安装pydotplus这个package)
在containter的bash中,利用:

python caffe/python/draw_net.py workspace/prettynet.prototxt workspace/prettynet.jpg

workspace/prettynet.prototxt:prototxt文件
workspace/prettynet.jpg:目标ipg的名字(及位置)

或者是代码

# Load the module
import caffe
import caffe.draw
from caffe.proto import caffe_pb2
from google.protobuf import text_format

# Set the parameters
input_net_proto_file = 'test_net.prototxt' # net configuration file
output_image_file ='test_net.jpg' # the output image
rankdir ='LR' # net arrange method: LR、TB、RL

# Read the net
net = caffe_pb2.NetParameter()
text_format.Merge(open(input_net_proto_file).read(), net)

# Draw the net
print('Drawing net to %s' % output_image_file)
caffe.draw.draw_net_to_file(net, output_image_file, rankdir)
print('done...')

你可能感兴趣的:(docker,caffe)