技术: 深耕 Docker 生态圈(七){Docker 的底层实现}

这里解决前面留下的疑问: Docker 和进程,命名空间,内核的关系。(最初谈 docker 的时候应该说过进程隔离)

现在我再对你说 Linux 进程也是容器,有没有恍然大悟?


Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。由于容器是进程级别的,相比虚拟机有很多优势。

打包一个进程,打包一个虚拟机,谁快?

容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

  • 虚拟机虚拟一层硬件然后运行不同的 OS,然后在 OS运行软件;打包 OS一起打包; 抽象层次是虚拟硬件及其OS
  • 容器是进程的封装,让容器通过容器引擎在机器上运行(uname -a发现是原来的机器);打包只涉及相关依赖(其他包或者库); 抽象层次是内核以及进程

容器解决问题的思路更贱暴力:

我们只是要搞一个运行时候环境出来吧,为什么要虚拟一个 OS 出来(即再弄一个内核出来);
直接共用内核部分不就不就好了?

直接面向进程,面向应用;把应用需要的包自己保管,其他需要的环境,共用内核不就好了。

Docker 只是 LXC 底层技术的一种;如果将来有更先进的思想,那么本质上共享内核也会被认为是选择之一;
不过现在来看 docker 的生态已经发展起来了,后起之秀?恐怕难。

Docker 大致原理是面向对象,架构图也好懂,但是实际设计起来,存储啊,网络通信啊,利用内核啊,包装进程&名字控件啊,这里面很多理论

这个方面,可以单独参考相关 linux 书籍,或者 docker 设计书籍,我这里先总结到这里。


Merlin 2018.3 docker面向应用,就像运行在独立操作系统里的进程

文章目录
|