Docker是如何实现的

概述

Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。通过镜像运行得到容器后,会在镜像上添加一层读写层,所有对于容器的修改都保存在这一层,所以容器的运行不会修改镜像,同时保证可以利用同一个镜像运行多个容器不会相互干扰。


容器

原理

Docker是如何做到把应用所有的依赖项全部打包,将应用运行在一个隔离的环境里面?先来看看一个应用运行的整个生命周期的依赖是什么:

  • 文件系统(进程的代码文件,配置文件,运行中读写文件等信息)
  • 权限(主要由用户控制进程的访问权限)
  • 进程间通信(进程之间的相互数据交互,常用信号量,消息队列,共享内存等)
  • 网络(进程通过网络进行通信)
  • 进程树(进程启动后,会形成进程树)
  • 主机名和域名(进程所在机器的主机名)

Linux如何做到以上的所有的资源的隔离?主要是利用Linux namespaces实现程序的隔离,包括

  • mount namespace, 实现文件系统隔离
  • user namespace 实现用户隔离
  • network namespace 实现隔离网络设备、网络协议栈
  • IPC namespace 实现进程间交互的隔离
  • pid namespace 实现进程树的隔离
  • uts namespace 实现主机名和域名的隔离
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容