当前位置: 首页 > 科技观察

一篇带你了解Docker

时间:2023-03-20 10:27:33 科技观察

isolation背后原理的文章vmware使用supervisor来模拟硬件,然后在上面安装一整套操作系统。这个完整的操作系统是运行在宿主机操作系统上的,是宿主机操作系统调度的,所以比较重。Docker复用宿主操作系统的内核作为普通进程调用,利用Linux提供的命名空间隔离技术实现虚拟化,是一种轻量级的虚拟化技术。一个命名空间代表一个标识符的可见范围,每个命名空间相互独立,所以标识符可以任意定义而不会冲突。Linux提供了6个命名空间:UTS(主机名)、User、Mount(文件系统)、Net、IPC、Pid。有了这些命名空间,进程本身就会感觉自己运行在一个独立的操作系统上,这是对操作系统的欺骗。Docker是轻量级的,可以在一个包中到处运行,并且启动速度很快,因此非常适合扩展和微服务。网络docker默认使用bridge网络模型,即容器的一端有veth,veth的另一端连接bridgebridge。网桥连接主机网络,通过NAT与外界通信。veth的原理是这样的,一般都是成对出现,发送到veth一端的包,另一端都能收到。docker还有其他几种模型,比如nonet,onlyloopbacknetworkloopbackinthecontainer。联邦网,多个容器使用同一个veth。hostnet,容器直接使用宿主机网络。镜像镜像是一个可执行包,其中包含运行应用程序所需的一切。dockerimage采用分层结构,也就是所谓的“分层存储,联合挂载”。最底层是bootfs,里面包含bootloader。再往上是根系统镜像层,上面是各种镜像层。除了顶层是可读写的,其余层都是只读的。因此,如果顶层镜像修改了下层镜像数据,数据会被COW(copyonwrite)复制到顶层,然后再修改。所以可以想象,这种联合挂载的文件系统效率不是很高,所以在使用上采用volumes,即与分层存储分离的存储。