Docker的详细教程见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
# 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
sudo docker pull tingtinglu/docker
注:tingtinglu/docker是dockerhub上的pre-built image的名字
即: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的名字
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后,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
sudo docker images
会得到本机的所有images的信息
sudo docker ps
显示的信息如下:
Container Id | IMAGE | command | Created | status | ports | names |
---|---|---|---|---|---|---|
container的ID | 生成该container的image的名称 | 生成该container的时间 | 该container的状态 | ContainerName(自动分配) |
sudo docker exec -it containerName
如果对docker的更改不是安装了jupyter这样的软件,而只是安装了一些package,那么,保存新的镜像只需要:
sudo docker commit containerID newImageName
containerID为要保存的容器的ID,newImageName为新image的名字
例如:ting/caffe:version1这样的名字,其中,version1为新容器的flag,可以用来标识新image的版本信息
该过程与直接利用dockerfile相比,不是很方便,但也是一种方法,所以记录在此(有了上面提到的dockerfile方法,完全可以抛弃本方法)
直接在docekr hub中搜索caffe,下载image kaixhin/caffe(Ubuntu Core 14.04 + Caffe. Includes Python interface.)
sudo docker pull kaixhin/caffe
sudo docker run -it kaixhin/caffe bash
pip install jupyter notebookyter
notebook是jupyter的名字
sudo docker commit --change='CMD jupyter notebook' serene_carson tingtingNew
sudo docker run -it --net=host -v /home/tingting/Dropbox/code/craterDetection/docker:/root/workspace tingtingNew
注:tingtingNew为刚刚安装了jupyter notebook的image
利用浏览器输入网址:localhost:8888
注:不知道为什么,本机安装的jupyter地址没法获取,所以这里使用了localhost
如何获取localhost的地址?
打开一个新的terminal,查看container的地址:
sudo docker inspect clever_bohr | grep IPAddress
这里的clever_bohr为该正在运行的container的名字,例子如下
在浏览器中输入:172.17.0.6:8888
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...')