Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
我也是最近才接触,有很多地方也不是太明白。
由于最近要学习caffe所以接触到了Docker,简单点理解就是一个虚拟机一样,可以在里面装很多东西。这里要先理解两个概念,一个是images,一个是container。这两个是docker中的重点。
image
image可以看做是一个模板,他是只读的。然后你可以通过这个image创建很多的样品,这些样品也可以成为image。如一个ubuntu的系统
container
这个就是上面的样品了。在container里面可以进行读写操作,就是可以进行修改这个容器。比如通过上面的Ubuntu创建了一个container,你就可以使用这个系统了。同时你也可以将这个系统进行修改后再变成image供以后来创建这样的系统。
来看看实际是怎么情况
通过 docker ps 来查看docker中的container,这里的image属性就是显示的他是通过哪一个image创建的。加上-a后会显示所有的container包括没有启动的
通过docker image来查看docker中的image
我们先来通过image来创建一个container
这里的docker run 其实是docker start 和docker create这两个指令的结合体。--name是指定这个container的名字。
5bbb这里的一串字符就是这个container的短Id,为啥叫短id,因为完整的id是这样的
进入之后用exit就退出了。是不是很简单。
但是当你再使用docker run。。这个命令的时候发现id会不一样。因为你又创建了一个新的容器。你在里面的修改的东西都没了。这个时候就需要container的名字或者短id来进入先前创建的container。
这里有两种方法。
第一种:
使用attach,这种使用exit后就直接关闭了容器
第二种:
这个指令使用前提也是这个container要启动了,这个指令的进入container后使用exit不会关闭容器。
进入容器之后。你又会发现个神奇的东西。vim这些指令都用不了。这个时候你就要敲apt-get update 完了再敲apt-get install vim来安装vim,其他的同理。
这样就可以愉快的使用这个容器了。
又有个问题,我如何将自己主机的文件传入容器内呢。
这里有几种方法
第一种:
在container创建的时候将本机的目录挂载到container的目录上,使用-v
前面是主机目录后面是container中的目录。不存在的话会自动的创建改目录。
第二种:
前面的方法是对应的创建container的时候。如果容器已经存在了呢?这个时候这样用
$ sudo cp file.txt /var/lib/docker/aufs/mnt/d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5/root/file.txt
那个特别长的就是长id,前面提到过
第三种方法
前面的那种只是将一个文件拷贝过去了。如果我想将整个目录里的文件拷贝过去呢
那就试试这个指令,使用这个指令有个蛋疼的地方,演示一下。
这个前面是主机的目录,后面的是容器目录。这两个都是要先存在的。haha是container的name,这样在里面就可以访问/home/dockerData的内容了,但是你会发现在/dockerData下会有一个home目录,home目录下有个dockerData目录,dockerData目录下才是我想访问的内容。。好尴尬。。怎么目录也过来了。
这个时候你需要这样来操作这条指令
这样就不会出现那种问题了,在/dockerData就可以直接访问到/home/dockerData的内容了
只是刚刚接触这个东西,这只是简单的使用,当了解了。