【Docker】知识一
目录
一、什么是容器?
1.容器技术的本质
1.1 Namespace
1.2 Cgroups
2.容器运行时
3.容器镜像
4.容器技术并非 Docker 独有
5.为什么要用容器?
二、什么是 Docker?
1.Linux 的 Namespace、CGroups 和 UnionFS 三大技术支撑了 Docker 的实现。
1.1 Namespace(命名空间)
1.2 CGroups(Control Group 控制组)
1.3 UnionFS(联合文件系统)
2.Docker 的核心组件
2.1 Image 镜像
2.2 Container 容器
2.3 Repository 仓库
3.Docer 和 Overlay2、UnionFS
一、什么是容器?
容器(Container)是一种轻量级的虚拟化技术,核心目标是通过 “隔离” 和 “打包”,让应用程序及其依赖(代码、运行时、库、配置等)能够在独立、一致的环境中运行,且与宿主环境和其他应用互不干扰。
1.容器技术的本质
容器 = CGroup + Namespace + Rootfs + 容器引擎。
容器就是利用 Linux 内核提供的 CGroup 和 Namespace 等技术,将一系列进程隔离在相互独立的环境中进行运行。
在现代的 Linux 发行版中,任何一组进程都是容器化的:/proc/PID/cgroup 文件保存了进程所属的控制组。/proc/PID/status 文件保存了进程的 Capability 信息。
/proc/PID/ns 保存了进程的命名空间。
1.1 Namespace
实现 “资源隔离”,让容器内的应用看到的是独立的进程 ID、网络栈、文件系统、用户空间。
1.2 Cgroups
实现 “资源限制”,为容器分配固定的 CPU、内存、磁盘 I/O 配额。
2.容器运行时
负责容器生命周期的核心工具,分为低层运行时(如runC)和高层运行时(如Containerd)。低层运行时直接调用内核创建隔离环境,高层运行时负责镜像管理、网络等完整功能。
3.容器镜像
容器镜像本质上是一个分层存储的打包文件,包含了应用运行所需的文件系统、依赖和配置。它主要分为两部分:一是多个只读的文件系统层,每层对应 Dockerfile 中的一条指令,这种分层结构让镜像可以共享和复用;二是一个 JSON 格式的配置文件,里面定义了容器启动时的命令、环境变量、用户权限等信息。
4.容器技术并非 Docker 独有
容器的本质是 “内核级资源隔离与封装”,这一技术理念在 Docker 诞生前已通过多种工具落地,且当前容器生态仍有多个主流替代方案,共同推动容器技术标准化与多元化发展。
5.为什么要用容器?
第一是环境一致性,容器确保应用在开发、测试和生产环境中的行为一致;第二是资源利用率高,相比虚拟机更轻量,单机可以部署更多服务;第三是部署和扩展快,适合敏捷和持续交付流程;第四是可移植性强,应用可以跨不同云或本地环境迁移。
二、什么是 Docker?
Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 可将应用程序与基础架构分离,以便快速交付软件。借助 Docker,我们可以像管理应用程序一样管理基础架构。通过利用 Docker 的发布、测试和部署代码方法,可以显著减少编写代码和在生产中运行代码之间的延迟。
简单来说,Docker 解决了 “在我电脑上能运行,到你电脑上就报错” 的经典问题,实现了 “一次构建,到处运行”的目标。
1.Linux 的 Namespace、CGroups 和 UnionFS 三大技术支撑了 Docker 的实现。
1.1 Namespace(命名空间)
容器隔离的基础,它建立了容器间的安全边界。容器间的隔离使用到 的命名空间包括:User,Mnt,Network,UTS,IPC,Pid。
1.2 CGroups(Control Group 控制组)
内核功能,用于限制、记录和隔离进程组的 CPU、内存、磁
盘 I/O 等资源的使用
1.3 UnionFS(联合文件系统)
UnionFS 是一种联合文件系统,它的核心原理是把多个目录(称为“层”)合并成一个统一的视图。
以容器为例,镜像的每一层是只读的,容器启动时会添加一个可写层在最上面。上层会覆盖下层。所有修改操作只发生在最上面的可写层,不会影响底层镜像。删除文件时,会在可写层中创建一个特殊标记文件(比如 .wh 开头的文件)来“遮盖”下层文件,实际上底层数据仍然保留。
2.Docker 的核心组件
Image、Container 和 Repository 是 Docker 的三个基本概念。
2.1 Image 镜像
是一个包含了运行应用程序所需的所有文件、依赖和配置的 root 文件系统,可以理解为 “只读的模板“。当执行 Docker 命令时,会基于现有镜像层创建一个新的可写层,用于构建容器运行时。即为分层存储,使得镜像构建和部署变得非常高效。
2.2 Container 容器
容器是镜像的 “运行实例”—— 当你基于镜像启动一个容器时,Docker 会在镜像的只读层之上添加一个 “可写层”,容器的所有修改(如文件创建、配置变更)都仅发生在这一层,不会影响底层镜像。容器是独立、隔离的。
2.3 Repository 仓库
仓库是用于存储和分发镜像的平台。
3.Docer 和 Overlay2、UnionFS
UnionFS 是这类分层叠加文件系统的统称,而 Overlay2 是 Linux 内核提供的一种 UnionFS 实现,作为Docker 默认的存储驱动,来管理镜像的分层和容器的可写层。所以关系是:Docker 依赖 Overlay2(一种 UnionFS)来实现容器文件系统的构建与管理。
今日分享到此就结束啦!









