Docker入门之基本概念

admin 2026-05-08 05:27:33 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档系统介绍了Docker容器技术的基本概念,重点对比了Docker与虚拟机的架构差异(轻量级容器vs完整虚拟化),详细解析了镜像、容器、仓库三大核心组件及其底层实现原理(Namespace资源隔离、Cgroups资源控制、UnionFS分层存储)。文档还提供了数据持久化方案(卷挂载)和网络模式选择建议,帮助开发者理解容器化部署的价值与实现方式。 综合评分: 85 文章分类: 解决方案,技术标准,安全工具,云安全,安全开发


cover_image

Docker 入门之基本概念

原创

一只岸上的鱼 一只岸上的鱼

一只岸上的鱼

2026年4月6日 12:09 江苏

在小说阅读器读本章

去阅读

缘起

三天不学习,赶不上刘主席,清明也是三天,得学点什么,也好告慰老祖,今天从docker开始,总结一下基本概念。

Docker 和虚拟机(VM)

  1. 虚拟机:通过Hypervisor模拟完整的硬件环境,每个虚拟机都运行着独立的操作系统内核和完整的系统进程
  2. Docker:本质上只是宿主机上的一个进程,通过 Namespace 和 Cgroups 对资源进行隔离,每个容器都运行着独立的进程

| 对比维度 | 虚拟机(VM) | Docker 容器 | | — | — | — | | 底层架构 | 虚拟化硬件,运行独立操作系统 | 共享宿主机内核,仅隔离用户空间 | | 启动速度 | 分钟级(需启动完整OS) | 秒级(直接启动进程) | | 资源占用 | 高(每个VM都带一个OS) | 低(仅运行应用+依赖) | | 可移植性 | 差(依赖特定虚拟化平台) | 极强(只要支持Docker即可运行) | | 隔离性 | 强(完整OS隔离) | 中等(基于命名空间与控制组) |

抛开技术概念,从使用感觉上来说:Docker是一个轻量化的虚拟机

Docker 的基本概念

程序员有句口头禅:“我的程序在我的电脑上跑得好好的,怎么一到服务器部署就报错?”

Docker 的出现,正是为了解决这一经典痛点:Docker 是一个开源的容器化平台,它能将应用程序及其所有依赖(代码、库、配置、环境变量等)打包成一个轻量级、可移植的容器,实现“一次构建,到处运行”

三个最核心的概念

镜像(Image):

一个只读的文件系统包。它包含了运行应用所需的一切:文件系统结构、应用程序代码、运行时环境、系统库和配置参数

容器(Container):

容器是镜像的运行实例

这里对程序员来说,最好理解:镜像就是代码文件,容器就是运行中的进程

仓库(Registry):

集中存储和分发镜像的场所:可以理解为软件市场一样的地方

最著名的公共仓库是 Docker Hub

Docker原理的概念

Namespace(命名空间)

命名空间是是 Linux 内核用于实现资源隔离的机制,也可以理解为视图,如果理解数据库的化,就非常好理解了:一个物理表,为了给不同的用户看到各自部分的数据,可以创建一个视图,普通用户只能看到自己的数据,而管理员可以看到所有数据。

在docker中,一共有4个命名空间的概念:

  1. PID Namespace:隔离进程 ID。容器内的第一个进程在其自身的 PID Namespace 中看到的 PID 为 1,而在宿主机上它只是一个拥有普通 PID 的进程。
  2. Mount Namespace:隔离文件系统挂载点。它将镜像中的文件系统挂载为容器的根目录(/),使容器内的文件操作被限制在这个独立的根文件系统之下。
ounter(lineounter(lineounter(line宿主机目录 ────▶ [绑定挂载] ────▶ 容器内部目录             │             └─── [命名卷] ────▶ Docker 存储路径(/var/lib/docker/volumes/...)
  1. Network Namespace:隔离网络资源。这是 Docker 网络能力的核心。每个容器拥有独立的网络接口、IP 地址、路由表和防火墙规则。Docker 通过创建虚拟网卡对(veth pair),并将一端接入宿主机上的虚拟网桥(如 docker0),来实现容器与宿主机、容器与容器之间的网络通信。

| 模式 | 描述 | 适用场景 | | — | — | — | | bridge (默认) | 容器通过 Docker 网桥连接,自动分配IP | 多容器应用内部通信 | | host | 容器直接使用宿主机网络栈 | 高性能网络应用 | | none | 无网络,仅保留回环接口 | 安全隔离场景 | | overlay | 多主机容器网络(Docker Swarm) | 集群部署 |

注:docker 网络值得再写一篇详细解释

  1. 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 入门之基本概念》

Docker入门之基本概念 网络安全文章

Docker入门之基本概念

文章总结: 该文档系统介绍了Docker容器技术的基本概念,重点对比了Docker与虚拟机的架构差异(轻量级容器vs完整虚拟化),详细解析了镜像、容器、仓库三大
评论:0   参与:  0