我理解的docker

来源:互联网 发布:mysql查询语句大全实例 编辑:程序博客网 时间:2024/06/07 03:10

docker是轻量级操作系统虚拟化的解决方案。

包括 镜像,容器,仓库,数据卷,链接  等。


仓库是存放镜像的地方,我们可以把自己的镜像pull下来,也可以push上去。

镜像 中有一个json,指定了从该镜像运行的容器的特征。 镜像实际上由一层一层的文件系统组成。

容器是 在镜像的基础上加了一层可写层。

数据卷是分离应用和数据的工具,我们可以把容器中的目录与宿主机的目录进行一一映射。 这样在容器关闭后 依然保有数据。

链接是 在容器启动时候被分配的一个随机的私有ip,它提供了容器之间相互通讯的渠道。



docker 是通过  namespace,cgroups,unionFS,来实现上面的四个功能的。

namespace 是隔离了每个容器,使每个容器有自己的命名空间。  命名空间实现了进程和进程之间使用资源的隔离。而且每个进程都可以当一台独立的主机,在自己的内部开启      不 同的进程。

cgroups    对共享资源(CPU io) 进行隔离 限制 审计。

unionfs  是一种分层的 轻量级的 高性能的文件系统。 docker通过aufs实现了它。



镜像的启动 首先会加载 bootfs  通过bootfsloader来加载 内核,当内核加载成功后, bootfs会被卸载掉。

之后会加载rootfs(根目录系统) 第一层 rootfs是 操作系统。这一层是只读的

之后会加载别的rootfs 直到加载完毕。

这些rootfs都是只读的,而且他们因为是增量的增加目录,所以节省了容量。

在只读层读完之后,会在最外层加一个可读可写层,随后该镜像变为一个容器,我们可以在容器中启动我们的应用。


最外层如果对底层rootfs进行修改了, 实际上是把底层rootfs中文件copy到了 rw层,进行的修改。随后底层的 文件将会被隐藏(copy on write).......



大致了解的就是这样。。。。等学的更深入了 再做修改。

可能还有不对的地方。



资料:

http://www.cnblogs.com/wish123/p/5573098.html

http://dockone.io/article/783

http://www.infoq.com/cn/articles/analysis-of-docker-file-system-aufs-and-devicemapper/




0 0
原创粉丝点击