本文带你了解Docker底层使用了哪些Linux技术
1、Docker底层特性:
- chroot:改变根目录,可指定任何一个目录作为根目录
- namespaces:进程通信隔离、文件系统/硬盘挂载点隔离/网络隔离/进程ID隔离,用户/用户组隔离
- cgroup:限制、隔离、分离一个进程组资源(如CPU、内存、磁盘I/O等)
- overlayFS:联合挂载技术
- iptables:防火墙规则
2、详细介绍:
overlayFS
结构:
- lowerdir:只读层
- upperdir:读写层
- mergedir:展示层
目录:
- lower
- upper
- work
宿主机可以创建这三个目录赋予权限,最终通过三个目录实现资源结构的划分、在合并展示给用户挂载在宿主机上,最终结果是在展示层显示
cgroup
当Docker创建一个容器时,它会为该容器在其父进程(通常是dockerd或containerd)所在的cgroups子系统下创建一个新的cgroups层级结构。对于不同的资源类型,Docker会在相应的cgroups子系统中设置适当的限制:
- 内存限制:可以通过设置内存上限(比如 -m 或 --memory 标志)限制容器可使用的总内存,还可以限制Swap空间的使用,避免容器因内存不足而影响整个系统的稳定性。
- CPU限制:可以限制容器可使用的CPU份额(比如 -c 或 --cpus 标志)以及CPU周期数,也可以通过CPU亲和性设定容器只能在特定CPU核心上运行。
- 磁盘I/O限制:通过blkio子系统,可以限制容器对磁盘I/O的带宽和IOPS。
- 网络带宽限制:利用 Traffic Control (tc) 工具结合cgroups,可以对容器的网络带宽进行限制。
namespaces
包括但不限于以下几种类型的Namespace:
- pid namespace:隔离进程ID空间,容器内的进程具有独立的进程号。
- network namespace:每个容器拥有独立的网络栈,可以拥有自己的网络设备、IP地址、路由表等。
- mount namespace:每个容器拥有独立的挂载点视图,实现文件系统的隔离。
- UTS namespace:隔离主机名和域名。
- IPC namespace:隔离进程间通信资源,如System V IPC和POSIX消息队列。
- user namespace:隔离用户和组ID,增强安全性。
Linux本身涵盖IPC/MNT/NET/PID/USER/UTS
ll /proc/$$/ns
chroot
拷贝程序所依赖的库文件:
ldd /bin/bash以此来实现
Docker能够实现容器与主机之间的文件系统隔离,使得容器内部的进程只能访问和操作容器内部的文件和目录,而不能直接访问主机的文件系统。这种隔离性不仅能够增加安全性,还可以保证容器与主机之间的文件系统互不干扰。 改变根目录技术