前言

快半年没更新博客了都长草了www,最近工作实在太忙了,能留给自己玩的时间也越来越少了,趁这次在公司做的分享所整理的资料,我也抽空跟大家系统讲解一下什么是docker.

docker的出现彻底解决了应用在运行时对环境依赖的问题,免除了开发者在不同机器上分别部署运行环境这一机械性的工作,只要用以打包好的镜像,你就可以运行在任何主流linux之上,而且你所得到的这些是几乎没有多余的性能消耗!我相信光靠这点docker就已成功引起了你的注意.接下来让我们了解什么是docker,以及它工作原理吧!

 

Docker容器技术与传统VM虚拟技术

用过虚拟机的人都知道,当你试图构建一个全新的运行环境来运行你的应用的时候,虚拟机会利用hypervisor技术来模拟一套全新的硬件环境来安装你的OS,并从物理机分割出这部分内存用于运行系统,在这之上你才能运行你的应用,可想而知这对于资源消耗是极大的,而docker正是这种问题的最好解决方案,见下图!

docker_vs_vm

docker实现了你所有"容器"运行在一个内核之上,而且容器与容器之间都是完全隔离的,每个容器的运行都是一个全新的环境!

Docker的三大组成

Image镜像

  1. 构建于被支持的文件系统之上,目前被广泛使用的有Aufs、devicemapper、btrfs,都属于联合文件系统。
  2. UFS允许相互隔离的文件或目录透明的叠加在一起,Docker正是利用这个特点将这些层组合为一个镜像。
  3. 分层管理,由json负责描述层级结构,对镜像所有更改提交清晰展现,支持快速迭代,回滚等等操作,有点类似于git

Container容器

  1. 容器是Docker镜像的实例,当需要运行这个实例时,Docker会利用LXC技术来隔离应用,运行时Docker在镜像层的最上层利用COW创建一个拥有读写权限的数据层
  2. 容器类似于一个轻量级的沙盒,每个沙盒进程独立,环境隔离,Docker允许采用端口映射的方式把内部的容器服务端口映射或者暴露该外部,用于容器与主机或容器与容器之间的通信
  3. 当容器被关闭时数据层会被得到释放,你在容器内所做的所有更改都将丢失!如果你想保留此更改,可以使用docker commit指令保存当前容器中的环境生成一个新的镜像

Repository仓库

  1. 笼统的来讲,仓库是存放镜像的中心,它维持着Docker整个生态圈的运作
  2. Docker Hub是世界最大的公共镜像仓库,在那里,你可以找到你想要的任何镜像
  3. 结合国情,安利个国内的公共镜像站:DaoCloud

联合文件系统

ufs联合文件系统可以将不同物理路径下的文件挂载到统一路径下,支持将文件的修改作为一次提交记录一层层的覆盖叠加,docker正是利用了这一特性实现了镜像的分层管理,使用者可根据不同需求的组成出不同的镜像来满足需求!

ufs

Docker的工作流

working

总结

认真看我以上所提到的几点,那你就已经对docker有了个系统性的认识了,如果想有一个更深层次的了解大家不妨阅读下源码,自己去寻找答案,我也鼓励大家这么做.

这是本次分享准备的PPT,有需要的可以拿去参考,注意不要更改作者信息哦~ https://otokaze.cn/share/docker/


一介布衣