Docker的本质就是一个进程。
Dokcer启动时,通过一个rest api接口去调docker daemon,然后通过containerd、shim来跑一个容器。
在图片里面可以发现,docker启动的时候实质上就是一个进程,而这个进程的父进程就是shim,shim的父进程最终就是pid为1的systemd。
并且Docker的文件系统,就是通过namespace来对每个进程进行隔离,实现容器之间相互隔离,并且不影响宿主机。
网络namespace
通过查看容器进程的network namespace进行查看,发现容器的ip地址就是由linux给容器这个进程调度到一个新的net namespace,并且给这个容器分配一个新的IP地址。
端口暴露
通过iptabled,对IP地址以及端口进行nat处理。
文件系统
通过mnt namespace,实现不同容器之间拥有不同的文件目录。