一、准备
为了对容器有一个更清晰、本质的了解我们需要对容器底层用到的一些技术有一个整体的认知,做到知其然知其所以然。
在聊容器之前,我们先回顾一下linux,linux的作用是管理硬件的资源分配,对于使用操作系统的人来说,我们就是为了让其运行我们的程序,这样就可以理解成我们将想运行的程序交给操作系统,操作系统来给我们的程序分配对应的资源。
1.1 进程
那么我们的程序本身就是一个安安静静待在磁盘上的一个可执行文件,并不能达到我们想要的目地,只有程序运行起来了,才有价值。那么这个程序是怎么运行的呢?
- 程序加载:内核将可执行文件从磁盘加载到内存中。
- 进程创建:内核为新进程分配一个唯一的进程 ID(PID),并为其创建一个进程描述符(process descriptor)数据结构,该数据结构包含了进程的所有信息,如进程状态、进程优先级、进程运行时间等等。
- 虚拟地址空间分配:内核为新进程分配一个虚拟地址空间,该地址空间包含了进程所需的代码、数据和堆栈等区域。
- 资源分配:内核为新进程分配所需的资源,如文件描述符、信号处理器、定时器等等。
- 初始化:内核初始化进程的状态和环境,如设置进程的初始状态、清空进程的内存空间等等。
- 执行进程:内核将 CPU 的控制权交给新进程,使其开始执行。
那进程和容器之间的关系是什么呢,其实我们可以这么理解:容器就是一个“盒子”,然后把进程塞进“盒子”里面,那每个“盒子”之间是隔离的,
大家都有自己的隐私。
- names