Docker-容器技术原理
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等