Docker 笔记(1)

​ 实习期间简单学习了一些Docker相关的知识,参考了2021最全 docker+k8s技术全解 #老男孩教育

虚拟化和容器技术

虚拟化技术会虚拟出多个内核,每个虚拟机拥有一个自己的内核,彼此之间隔离性非常好。并且在创建虚拟机之初就定义好了虚拟机的资源限制,如CPU核心数,内存大小,磁盘大小等。

容器技术是直接运行在宿主机之上的,多个容器共用一个内核,因此隔离效果比较差,但是性能更好。

Docker基于容器技术的轻量级虚拟化解决方案。

NameSpaces资源隔离

为了让多个容器以沙盒的方式在宿主机上运行,就需要提前定义好各个容器能看到的边界。由于各个容器都是直接运行在宿主机系统上,因此需要内核对各个容器的上下文进行修改,让他们看上去是一个独立的操作系统。比如,指定PID为1的进程,指定网卡设备,指定文件系统挂载,指定用户等等。

Linux操作系统内核从底层实现了为各个进程创建独立用户空间的功能,不同用户空间似于一个个独立的虚拟机系统,用户空间内部进程不能感知到其它用户空间中的进程状态。内核提供了六种Namespaces:

.PID

进程编号

内核版本: 2.6.24

.NET

网络设备、网络协议栈、端口等

内核版本: 2.6.29

.IPC-

信号量、消息队列、共享内存

内核版本: 2.6.19

.MOUNT

-文件系统,挂载点

内核版本: 2.4.19

.UTS -

主机名和主机域

内核版本: 2.6.19

USER -

操作进程的用户和用户组

内核版本: 3.8.x