Docker 进阶完整学习路线
核心概念 Docker 进阶学习路线,面向云原生运维和容器开发,覆盖底层原理、网络存储、生产运维和安全等模块。
1. 前置基础(进阶前必须吃透)
- 基础镜像、容器生命周期、run/create/start/stop/rm/rmi 基础命令;
- Dockerfile 基础指令 FROM/COPY/ADD/RUN/CMD/ENTRYPOINT/EXPOSE;
- 基础网络模式:bridge、host、none;
- 基础存储:bind mount、volume;
- 简单镜像推送拉取私有仓库。
下面分 9 大进阶模块,按学习顺序整理,包含知识点、作用、生产场景。
模块1:Dockerfile 进阶优化(镜像瘦身、安全、分层缓存)
2. 多阶段构建 Multi-stage(最核心进阶)
- 解决痛点:编译环境、依赖打包进最终镜像,镜像巨大;
- 原理:分构建阶段、运行阶段,只拷贝编译产物,丢弃编译器、源码、工具;
- 适用:Java Maven、Go、Node、Python 项目;
- 实操:Go 编译镜像、SpringBoot 分层打包。
3. 分层缓存机制
- RUN、COPY 分层缓存规则:文件不变则复用缓存,加快构建;
- 优化技巧:先拷贝依赖文件安装,再拷贝业务代码。
4. 专用轻量化基础镜像
- alpine 极简镜像(musl libc,体积小,部分软件兼容性坑);
- distroless 无操作系统镜像,只有运行时程序,无shell、包管理器,安全性极高;
- scratch 空白镜像(Go静态编译专用)。
5. 指令进阶区分
- COPY vs ADD:ADD 自动解压远程压缩包,COPY 仅复制;
- CMD 与 ENTRYPOINT 完整区别、组合用法;
- USER 指定运行用户(禁止容器内root运行,安全加固);
- WORKDIR、HEALTHCHECK 容器健康自检;
- ARG 构建时参数、ENV 运行时环境变量;
- VOLUME 匿名卷自动挂载坑。
6. 镜像安全加固
- 不使用latest标签,固定版本;
- 禁止容器root运行;
- 清理yum/apt缓存,减少漏洞面;
- 禁止内置ssh、curl等高危工具;
- 镜像漏洞扫描:trivy。
模块2:Docker 存储进阶(对应K8s存储底层原理)
7. 三种存储完整对比
- Bind Mount:宿主机指定目录挂载,生产风险(权限、文件覆盖、宿主机依赖);
- Named Volume:Docker管理持久卷,独立生命周期,推荐容器持久化;
- tmpfs 内存挂载(临时缓存,速度快,Pod EmptyDir内存底层实现)。
8. 存储驱动原理(重点)
overlay2(当前默认驱动)分层读写机制:
- 镜像只读分层;容器上层可写层;
- 写时复制CoW原理;
- 磁盘占用、分层删除逻辑;
- devicemapper/aufs 老旧驱动淘汰原因。
9. 数据生命周期
- 删除容器不删除volume;
- docker volume prune 清理无用卷;
- 匿名卷残留垃圾数据问题。
模块3:Docker 网络进阶(对应Calico、Service底层网络)
10. 四大原生网络深度原理
- bridge 默认网桥:veth pair、iptables NAT、容器互通;
- host 共享宿主机网络栈(无独立IP,端口冲突风险);
- none 无网络;
- container 共享其他容器网络(Pod pause共享网络底层实现)。
11. 自定义网桥 docker network create
- 不同网桥容器默认隔离;同一网桥自动互通;
- 替代默认bridge,多业务网络隔离。
12. 端口转发、iptables SNAT/DNAT底层机制
- -p 端口映射内核规则;
- 容器访问外网SNAT;外网访问容器DNAT。
13. Macvlan / Ipvlan 高级网络
容器分配宿主机同网段独立物理IP,无端口映射,适合传统业务容器化。
14. Docker DNS、容器域名互通
同一网络内容器名称互相解析,Docker内置DNS服务器。
模块4:Docker Compose 生产级编排(单机多容器管理)
15. compose.yaml 高阶语法
- service 依赖 depends_on、启动顺序控制;
- volumes 命名卷、bind挂载、tmpfs;
- networks 自定义隔离网桥;
- environment、.env 环境变量分离;
- restart 重启策略 always/on-failure;
- healthcheck 服务健康检查;
- privileged、cap_add/cap_drop 权限管控;
- resource 限制 mem_limit、cpus(对应K8s limits底层cgroup)。
16. 常用命令进阶
up -d / down / stop / logs -f / exec / ps
多环境区分:compose -f dev.yaml、prod.yaml。
17. 典型场景
单机中间件集群:ES、Redis、MQ 一键启停整套环境。
模块5:容器资源限制与安全进阶(Cgroup、Capabilities)
18. Cgroup 资源限制底层
- —memory 内存限制,OOM触发机制;
- —cpus CPU核心配额、CPU权重—cpu-shares;
- —blkio 磁盘IO限速;
- 对应K8s requests/limits底层实现。
19. Linux Capabilities 细粒度权限
- —privileged 全开权限(高危,禁止生产);
- cap_add / cap_drop 精细增减权限;
- 容器默认删除高危权限:CAP_SYS_ADMIN、CAP_NET_ADMIN等;
- 容器逃逸风险原理。
20. 容器安全全套加固
- 非root用户运行容器 USER;
- 只读文件系统 —read-only;
- 挂载目录只读 :ro;
- 禁止特权容器;
- 限制系统调用 seccomp;
- 镜像漏洞扫描 trivy;
- 私有仓库HTTPS、镜像签名。
21. 常用安全参数示例
docker run --read-only --cap-drop ALL --user 1001 --memory 512m --cpus 0.5
模块6:镜像仓库与镜像分发进阶
22. 私有仓库搭建
- registry 官方私有仓库;
- Harbor 企业级仓库(权限、漏洞扫描、项目隔离、复制);
23. 仓库安全
HTTPS自签证书、basic认证、镜像推拉鉴权;
24. 镜像管理进阶
- docker save / load 离线镜像迁移;
- docker export / import(丢失分层,不推荐生产);
- 镜像重标签 tag、批量清理镜像;
- 镜像分层查看 docker history。
模块7:Docker 底层内核原理(运维面试高频)
25. 容器三大隔离技术(核心)
- Namespace 资源隔离
PID、Net、Mount、User、IPC、UTS 六大命名空间;
对应Pod pause容器共享netns原理。 - Cgroup 资源限制(CPU/内存/IO);
- rootfs 根文件系统分层镜像(overlay2)。
26. 容器与虚拟机本质区别
虚拟机:完整内核+硬件虚拟化;
容器:共享宿主机内核,仅隔离用户态资源,轻量化。
27. 进程模型
容器1号进程、僵尸进程回收、信号转发(docker stop 发送SIGTERM)。
模块8:Docker 运维排错进阶
28. 容器启动失败排查
docker logs、docker inspect、健康检查失败、端口占用、权限不足、目录不存在。
29. 资源故障
容器OOM被杀死、CPU占满、磁盘卷空间爆满;
30. 网络故障
容器互通失败、端口映射失效、外网不通、DNS解析失败;
31. 镜像故障
分层丢失、缓存失效、多阶段构建产物缺失;
32. 调试工具
docker exec、nsenter 进入容器命名空间、trivy漏洞扫描。
模块9:Docker 生产最佳实践 & 迁移K8s过渡
- 容器重启策略规范;
- 统一资源限制,避免抢占宿主机资源;
- 禁止privileged、root运行;
- 镜像分层瘦身、多阶段构建;
- 数据统一使用named volume,杜绝bind mount;
- 业务compose平滑迁移至Deployment;
- 日志标准输出stdout/stderr(对接容器日志采集)。
二、学习优先级路线(由浅到深)
- Dockerfile 进阶(多阶段、轻量化镜像、安全)
- 存储驱动 overlay2 + 三种卷完整区别
- Docker 网络原理、自定义网桥、macvlan
- Compose 完整生产语法、多环境管理
- 资源限制 cgroup、cap权限安全加固
- 底层隔离原理 Namespace/Cgroup/rootfs
- 私有仓库 Harbor、镜像扫描、离线迁移
- 容器排错全套方案
- 生产规范,向K8s过渡改造
三、学完能解决什么问题
- 制作极小、安全、无漏洞业务镜像;
- 看懂容器网络、存储底层,排查网络/IO故障;
- 理解K8s底层存储、网络、资源限制的Docker源头;
- 企业单机多服务compose编排、本地开发环境标准化;
- 容器安全加固,规避容器逃逸、资源雪崩;
- 排查容器OOM、启动失败、网络不通等线上故障。
关联文档