文章总结: 该文档系统介绍了Docker容器技术的基本概念,重点对比了Docker与虚拟机的架构差异(轻量级容器vs完整虚拟化),详细解析了镜像、容器、仓库三大核心组件及其底层实现原理(Namespace资源隔离、Cgroups资源控制、UnionFS分层存储)。文档还提供了数据持久化方案(卷挂载)和网络模式选择建议,帮助开发者理解容器化部署的价值与实现方式。 综合评分: 85 文章分类: 解决方案,技术标准,安全工具,云安全,安全开发
Docker 入门之基本概念
原创
一只岸上的鱼 一只岸上的鱼
一只岸上的鱼
2026年4月6日 12:09 江苏
在小说阅读器读本章
去阅读
缘起
三天不学习,赶不上刘主席,清明也是三天,得学点什么,也好告慰老祖,今天从docker开始,总结一下基本概念。
Docker 和虚拟机(VM)
- 虚拟机:通过Hypervisor模拟完整的硬件环境,每个虚拟机都运行着独立的操作系统内核和完整的系统进程
- Docker:本质上只是宿主机上的一个进程,通过 Namespace 和 Cgroups 对资源进行隔离,每个容器都运行着独立的进程
| 对比维度 | 虚拟机(VM) | Docker 容器 | | — | — | — | | 底层架构 | 虚拟化硬件,运行独立操作系统 | 共享宿主机内核,仅隔离用户空间 | | 启动速度 | 分钟级(需启动完整OS) | 秒级(直接启动进程) | | 资源占用 | 高(每个VM都带一个OS) | 低(仅运行应用+依赖) | | 可移植性 | 差(依赖特定虚拟化平台) | 极强(只要支持Docker即可运行) | | 隔离性 | 强(完整OS隔离) | 中等(基于命名空间与控制组) |
抛开技术概念,从使用感觉上来说:Docker是一个轻量化的虚拟机
Docker 的基本概念
程序员有句口头禅:“我的程序在我的电脑上跑得好好的,怎么一到服务器部署就报错?”
Docker 的出现,正是为了解决这一经典痛点:Docker 是一个开源的容器化平台,它能将应用程序及其所有依赖(代码、库、配置、环境变量等)打包成一个轻量级、可移植的容器,实现“一次构建,到处运行”
三个最核心的概念
镜像(Image):
一个只读的文件系统包。它包含了运行应用所需的一切:文件系统结构、应用程序代码、运行时环境、系统库和配置参数
容器(Container):
容器是镜像的运行实例
这里对程序员来说,最好理解:镜像就是代码文件,容器就是运行中的进程
仓库(Registry):
集中存储和分发镜像的场所:可以理解为软件市场一样的地方
最著名的公共仓库是 Docker Hub
Docker原理的概念
Namespace(命名空间)
命名空间是是 Linux 内核用于实现资源隔离的机制,也可以理解为视图,如果理解数据库的化,就非常好理解了:一个物理表,为了给不同的用户看到各自部分的数据,可以创建一个视图,普通用户只能看到自己的数据,而管理员可以看到所有数据。
在docker中,一共有4个命名空间的概念:
- PID Namespace:隔离进程 ID。容器内的第一个进程在其自身的 PID Namespace 中看到的 PID 为 1,而在宿主机上它只是一个拥有普通 PID 的进程。
- Mount Namespace:隔离文件系统挂载点。它将镜像中的文件系统挂载为容器的根目录(/),使容器内的文件操作被限制在这个独立的根文件系统之下。
ounter(lineounter(lineounter(line宿主机目录 ────▶ [绑定挂载] ────▶ 容器内部目录 │ └─── [命名卷] ────▶ Docker 存储路径(/var/lib/docker/volumes/...)
- Network Namespace:隔离网络资源。这是 Docker 网络能力的核心。每个容器拥有独立的网络接口、IP 地址、路由表和防火墙规则。Docker 通过创建虚拟网卡对(veth pair),并将一端接入宿主机上的虚拟网桥(如 docker0),来实现容器与宿主机、容器与容器之间的网络通信。
| 模式 | 描述 | 适用场景 |
| — | — | — |
| bridge (默认) | 容器通过 Docker 网桥连接,自动分配IP | 多容器应用内部通信 |
| host | 容器直接使用宿主机网络栈 | 高性能网络应用 |
| none | 无网络,仅保留回环接口 | 安全隔离场景 |
| overlay | 多主机容器网络(Docker Swarm) | 集群部署 |
注:docker 网络值得再写一篇详细解释
- User Namespace:隔离用户和用户组 ID。这是重要的安全特性。它通过映射机制,可以将容器内以 root 身份运行的进程,映射到宿主机上的一个普通非特权用户。这样即使容器被攻破,攻击者在宿主机上的权限也受到极大限制,提升了整个系统的安全性。
ounter(lineounter(lineounter(line容器内部: 宿主机: UID: 0 (root) → UID: 100000 (普通用户) GID: 0 (root) → GID: 100000
Cgroups(控制组)
Namespace 解决了“看不见”(隔离)的问题,但无法解决“抢不过”(资源争抢)的问题。Cgroups 正是为了解决资源限制问题而生的 Linux 内核机制。
它的作用是限制、记录和隔离进程组对物理资源的使用。Docker 通过 Cgroups 可以对每个容器进行精细的资源控制,如设定内存上限、CPU使用权重、磁盘I/O带宽等。
分层存储与打包:UnionFS(联合文件系统)
UnionFS 是实现 Docker 镜像分层和容器可写层的核心技术。
怎么简单解释这个概念呢?大概就是,一样的东西,只放一份,其他都用超链接。
就好像冷兵器的棍、矛、枪、戈、青龙偃月刀、丈八蛇矛、方天画戟:他们都有一根棍子,换不同的头,
而docker的镜像分层的概念,就是,一个镜像,按照内容拆分很多层,当多个镜像的有相同层时候,就只存一份,其余用超链接。
举个实例:一个基础镜像100M,我放了一个程序a,a是10M,创建了镜像A;
又重新放了一个程序b,创建了镜像B,
猜猜他占用的存储空间是多少?是基础100M+A镜像110M+B镜像110M么?
分层存储也值得再写篇单独实验一次
数据持久化:卷(Volumes)
静态的镜像只是代码,运行中的容器是内存中进程,那运行后的数据呢?难道制作计算,不存储?这种应用很少吧?
所以Docker 引入了 卷(Volume) 的概念,可以将卷挂载到容器内的指定路径,容器对挂载点的所有读写操作都会直接作用于卷,从而实现数据的持久化保存和跨容器共享
就好像给系统插入一个U盘,然后在U盘上存储数据,当系统重启后,U盘还在,数据还在。
分类:
| 类型 | 用途说明 | 适用场景 | | — | — | — | | 命名卷 (Named Volume) | Docker 管理的持久化存储 | 数据库、配置文件 | | 绑定挂载 (Bind Mount) | 将宿主机目录映射到容器 | 开发调试、日志查看 | | 临时卷 (tmpfs) | 仅在内存中存在,容器停止即消失 | 敏感数据、临时缓存 |
小结
可以说虚拟机开启了云计算的时代,而 Docker 则开启了云开发的时代。
docker极大的缓解了开发者和运维者的紧张关系,哈哈
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:一只岸上的鱼 一只岸上的鱼 一只岸上的鱼《Docker 入门之基本概念》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论