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 |