Docker(一)理念解析

/

2018-11-7

(摘自宋宝华:Docker 最初的2小时(Docker从入门到入门)

Docker是什么

从正常情况,docker,vmware三种情况下解释docker:

  • normal:

假设没有Docker,然后有进程1和进程2,它们的运行将类似下图,进程1和进程2共享kernel,它们是同一OS下2个进程,因此必须拥有不同PID,但是又共享网卡,共享IP地址,看到一样的根文件系统(不chroot的情况下)等,可以用Linux IPC手段进程间通信。

  • docker:

有Docker的情况下,假设进程1和进程2运行于不同的容器,那么进程1和进程2都觉得自己和对方没有半毛钱关系,都觉得自己拥有自己的根文件系统,自己的网卡等,然后进程1和进程2的PID还可以一样,比如假设2个都是100。但是,此100非彼100。

  • vmware:

Virtualbox等虚拟机的思路则完全不一样,如果进程1和进程2运行于不同的虚拟机,则操作系统都是双份的,它们感觉自己在不同的虚拟电脑上面跑。

Docker的结构

Docker中可能涉及到3个机器或者更多机器,一个运行docker命令的client, 一个包含images并以容器(container)形式运行image的主机,一个docker的images仓库。client与docker host上面的docker daemon通信。当然docker client和host可以运行于一台机器),默认的docker仓库是Docker Hub.

一般的流程中,client发pull命令从仓库把image拉到docker host,然后通过run命令指挥image到host上面弄一个container来跑这个image。当然也可以是相反的流程,client 通过build命令在host上面创建一个自己的image,然后通过push命令把image推到仓库。之后这个image可以被别的人或者自己pull。

镜像(image)与容器(container)

镜像构建时,会一层层叠加,前一层是后一层的基础。

每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除

所以我们在container上的操作便只发生在container层,并不会改变项目的image层

当然了,也可以保存我们自己的修改,建造自己的的image,就像图片中一样,一层层往上加

Reproduced please indicate the author and the source, and error a link to this page.
text link: //sealbaby.cn/docker-1

Say something...

Website
Username
Email