Docker-容器技术原理

286 阅读2分钟

1: 什么是Docker

  • Docker是一个用于开发,发布,运行应用程序的开发平台。Docker要做的就是将各种软件打包成一个个的镜像,然后分发,且在运行的时候可以相互隔离

2:chroot

  • 提起容器就不得不说chroot,chroot是容器最早的雏形,chroot是linux中的一个操作,chroot意味着切换根目录,也意味着针对运行该程序的进程,改变它的根目录,并且该进程无法访问,修改,读取根目录之外的资源,这与Docker是非常相似的

3: Docker容器实现原理

  • Docker是利用linux的Namepsace,Cgroups,联合文件系统 三大机制来保证实现的,所以它是使用Namespce来实现资源的隔离,使用Cgroups来实现资源的限制,联合文件系统用于镜像构建和容器运行环境

4: Namespace

  • Namespce是linux内核的一项功能,该功能对内核资源进行隔离,使得容器中的进程都可以单独在命名空间中运行,并且只可以访问命名空间内的资源,Namespace可以隔离进程ID,主机名,用户ID,文件名,网络访问和进程间通信等相关资源
  • Docker主要用到以下五种命名空间
    • pid namespace:用于隔离进程ID
    • net namespace:隔离网络接口
    • mnt namespace:文件系统挂载点隔离
    • ipc namespace:信号量,消息队列和共享内存的隔离
    • uts namespace:主机名和域名的隔离

5: Cgroups

  • Cgroups是一种Linux内核功能,可以限制和隔离进程的资源使用情况(cpu,内存,磁盘IO,网络等),在容器的实现中,Cgroups通常用来限制容器的cpu和内存等资源的使用

6: 联合文件系统

  • 联合文件系统,又叫UnionFS,是一种通过创建文件层进程操作的文件系统,因此,联合文件系统非常轻快,Docker使用联合文件系统为容器提供构建层,使得容器可以实现写时复制以及镜像的分层构建和存储,常用的联合文件系统有AUFS,Overlay等