Docker概述与原理学习笔记

举报
君陈SaMa 发表于 2026/07/19 09:03:35 2026/07/19
【摘要】 1.Docker解决的痛点· 传统软件件交付和部署有几个痛点:a. 开发环境和生产环境不一致开发在 Windows,部署在 Linux,经常出现 “我本地能跑,线上跑不起来”。b. 传统虚拟机太重虚拟机(VMware等)需要跑完整的操作系统(几十 GB),启动慢,资源浪费大。c. 应用依赖管理复杂一个应用可能依赖不同版本的库(PHP 7.4 vs PHP 8.1),在同一台服务器上难以共存。...

1.Docker解决的痛点
· 传统软件件交付和部署有几个痛点:
a. 开发环境和生产环境不一致
开发在 Windows,部署在 Linux,经常出现 “我本地能跑,线上跑不起来”。
b. 传统虚拟机太重
虚拟机(VMware等)需要跑完整的操作系统(几十 GB),启动慢,资源浪费大。
c. 应用依赖管理复杂
一个应用可能依赖不同版本的库(PHP 7.4 vs PHP 8.1),在同一台服务器上难以共存。
· Docker特点(针对痛点)
a. 可移植,同一开发、测试、生产环境,一次打包,到处运行
b. 标准化:镜像规范化,交付更容易,镜像格式(OCI 标准)已经统一,Docker 只是其中的实现之一
c. 轻量,容器比虚拟机快、占用资源少
d. 隔离, 通过 Namespace 和 Cgroups 技术,每个容器拥有独立的文件系统、进程空间、网络栈,不同版本的依赖可以跑在不同容器中,完全互不干扰,天然解决依赖冲突问题。
e. 生态完善: 有完整工具链与社区生态
· 容器相关
a. Docker 仍是最流行的容器开发工具。
b. K8s(Kubernetes )主导容器编排,多容器管理、跨主机的容器管理
c. K8s默认容器运行时改用 containerd(从 Docker 剥离出的核心),支持一切支持 CRI(容器运行时接口)的容器运行
2.Docker原理
· Docker的三大核心技术:
①Cgroups(control groups)资源控制组
②Namespace命名空间
③Union Filesystem联合文件系统
· 资源控制组Cgroups
实现容器的资源隔离与限制,包括 CPU、内存、磁盘 I/O 等资源的分配和管理,避免单一容器耗尽宿主机资源(稳定性)、防止安全攻击(安全性)。可在启动容器时限制cpu和内存使用量
· 联合文件系统
①Docker支持多种联合文件系统类型
文件系统类型 特点
OverlayFS 性能高,实现简单(Docker 默认推荐)
AUFS 早期 Docker 默认驱动,兼容性好但未合并到内核主线
Device Mapper 基于块设备,适合旧内核(如 CentOS 6)
Btrfs/ZFS 支持高级功能(快照、压缩),但配置复杂
②分层结构
1.1. 镜像层
1.1.1. Docker 镜像是只读层,由多个层组成,每层代表一次修改
1.1.2. 查看某镜像的制作历史docker history xxx可以查看每层的操作的整个镜像制作过程
1.2. 容器层
1.2.1. 容器启动时,在镜像层之上添加一个可写层,存储运行时修改的数据
③联合挂载
1.1. 将多个目录(镜像层 + 容器层)合并挂载到一个虚拟目录,用户看到的是最终叠加结果。
1.2. 写时复制(Copy-on-Write, CoW):当读取时类似快捷方式,直接读取源文件,当写时,联合文件系统会从底层的只读层复制文件到可写层,再修改,避免直接修改镜像层
④容器和传统虚拟化的区别
a. 传统虚拟化:虚拟机、每一个虚拟机可以装独立的操作系统,但占用cpu、内存、储存空间等资源更大
b. 容器:不需要独立的操作系统,只有一个docker进程和宿主机共享操作系统,启动容器就像启动一个进程,简单高效
c. 传统虚拟化在隔离性和安全性上强过容器
· 命名空间Namespace
是 Linux 内核提供的核心隔离机制,允许进程、用户、网络等系统资源被分割成多个独立的视图,使得每个 Namespace 中的进程只能看到该 Namespace 内的资源,从而实现容器之间的隔离。
①进程隔离(PID ):每个容器有自己的进程 ID 编号,看不到宿主机或其他容器的进程。
②网络隔离(Net ):每个容器有独立的网络栈(IP、端口、路由表、防火墙规则等)。
③文件系统隔离(Mount ):容器可以有自己的 / 根文件系统,不影响宿主机。
④主机名隔离(UTS):容器可以设置自己的主机名(hostname)。
⑤用户隔离(User):容器内可以使用不同的用户 ID 映射,提升安全性。
⑥进程间通信隔离(IPC ):隔离 System V IPC 和 POSIX 消息队列。
⑦时间 (Time)(Linux 5.6+新特性) :允许容器使用独立的时间设置,但一般与主机时间保持一致
3.Docker 的三大组件
容器、镜像,和仓库
· 镜像(image)
镜像是只读的应用模板,打包了应用程序、依赖库、运行环境、配置文件和完整文件系统,容器运行时应用镜像。
· 容器(container)
容器是镜像运行后的实例,首先要下载部署docker软件,运行docker进程,再新建一个或多个容器用来跑业务
· 仓库(repository)
类似dnf软件仓库,docker的仓库是集中存放、分发镜像的场所,用于跨机器、跨环境共享和传输镜像。
entos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
· docker网络模式
网络模式 特点 独立网络命名空间 网络相关 隔离等级 典型适用场景
bridge
桥接模式 同一 bridge 网络内的容器可以互相通信 访问外网依赖 NAT 转换 是 分配实机docker0网卡网段的独立容器 IP 高 单机业务容器、开发测试环境
host
主机模式 容器直接共享宿主机完整网络栈,无独立网络隔离 否 直接使用宿主机 IP和网卡 低 高性能网关、压测工具、网络密集型服务
none
无网络模式 仅保留 lo 本地回环接口 是 无外部 IP,没有网卡,没有网关,无法访问外网,无法与其他容器通信 最高 高安全敏感任务、离线加密计算、隔离测试容器
macvlan
共享容器模式 让容器绕过 docker0 网桥和 NAT,直接"挂"在宿主机物理网卡上,每个容器获得独立的 MAC 地址和物理网段 IP,在网络中表现得就像一台真实的物理设备,可以直接和局域网内其他设备通信,无需 NAT 否 每个容器获得独立的 MAC 地址和物理网段 IP 中 容器网络代理、日志采集旁路容器
overlay
覆盖网络模式 当你有多台 Docker 主机,容器之间需要直接通信时,bridge 就无能为力了。Overlay 基于 VXLAN 隧道在多台主机之间建一个虚拟二层网络,容器跨主机像在同一个局域网中通信 是 集群内独立网段 IP 高 Docker Swarm 多节点集群、跨主机服务互通

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。