随着云计算、容器技术的不断普及,有越来越多的人开始了解虚拟化、了解Docker。对于大多数初学者来说,他们会困惑:Docker的虚拟化是如何实现的?Docker的虚拟化与传统的虚拟化有啥区别?在Linux内核层面是如何支持Docker虚拟化的?这篇文章就学习一下Docker背后的基础技术LXC(Linux Container)。
一、介绍
LXC是一个非常著名的并且经过严格测试的底层Linux容器运行时。自2008年以来,一直处于活跃的开发状态,并在世界各地的关键生产环境中得到验证。LXC的一些核心贡献者也是帮助在Linux内核内实现各种容器化特性的人。LXC是用于访问Linux内核容器特性的用户空间接口,通过强大的API和简单的工具,Linux用户可以轻松创建和管理系统或应用程序容器。
LXC是一种内核虚拟化技术,能够提供轻量级的虚拟化,它实现了进程级的沙盒封装,能够让一些沙盒进程运行在一块相对独立的空间,能够方便的控制他们的资源调度。
![4c55cfef468b060edecff9f0a9b16a12.png](https://i-blog.csdnimg.cn/blog_migrate/78b44645d39429fa4c3dd50198bc0abf.jpeg)
LXC与Docker的区别
二、特性
为了实现Docker的虚拟化,LXC具有以下的内核特性:
1、内核命名空间(Kernel namespaces)
一个命名空间是全局系统资源的抽象封装,只对该命名空间内的进程可见,每个进程都有自己的专属资源。对这些全局资源的更改也只对命名空间内部的成员进程可见,其他进程不可见。命名空间的一个用途是实现容器。
命名空间的类型
下面的表格显示了在Linux内部的命名空间类型。表格的第二列显示了命名空间的标识,在与其他API调用时使用。第三列是这种命名空间类型所隔离的资源信息。
![856a5c93fc933ad0203cb2abfcc9efb3.png](https://i-blog.csdnimg.cn/blog_migrate/5054f42b7d5db4d7dbf601b2ef9d758c.jpeg)
命名空间的类型
创建一个新的命名空间一般