容器网络排障实战
容器网络故障往往横跨命名空间、veth 对、iptables 与 DNS 四层。本篇给出一套可复用的排障路径:用 nsenter 与 netshoot 进入目标命名空间、按 veth 索引定位对端、检查 DOCKER-USER 与 DNAT 规则、排查 127.0.0.11 内嵌解析器、定位 MTU 分片与 conntrack 表满,并附常见故障模式对照表与排障 SOP。
category
容器网络故障往往横跨命名空间、veth 对、iptables 与 DNS 四层。本篇给出一套可复用的排障路径:用 nsenter 与 netshoot 进入目标命名空间、按 veth 索引定位对端、检查 DOCKER-USER 与 DNAT 规则、排查 127.0.0.11 内嵌解析器、定位 MTU 分片与 conntrack 表满,并附常见故障模式对照表与排障 SOP。
在流水线里构建镜像有 DinD、DooD 与无守护进程构建器三条路。本篇讲清 docker:dind 的 privileged 与 TLS 配置、storage driver 在嵌套场景下的坑、挂载 docker.sock 的风险边界,给出 GitLab Runner docker executor 与临时 runner 的落地配置、层缓存复用策略与安全加固清单。
macOS 上没有原生容器,必须在轻量虚拟机里跑 Docker。本篇对比 Docker Desktop、Colima 与 OrbStack 三条路线的架构差异,给出 Colima 的 profile 与虚拟机参数配置、OrbStack 的文件共享与内置 K8s 能力、两者的启动速度与挂载性能差异,以及 docker context 切换、团队统一与回退的实践。
系统梳理 Docker 日志的两条路径:日志驱动直发与落盘后采集。逐个对比 json-file、local、journald、fluentd 等驱动的适用场景与配置参数,剖析 max-size/max-file 轮转、非阻塞模式与背压丢日志的机制,并给出采集管道、多行日志处理与容器日志排障的完整实践。
讲解 docker buildx bake 如何用一个声明式文件替代一长串 docker buildx build 命令:HCL/JSON/Compose 三种文件格式与解析优先级、targets/groups/inherits/matrix 语法、变量与上下文注入、多平台与缓存导出配置,以及在 CI 中按需构建、按目标复用的工程实践与调试技巧。
从 daemon 与 daemonless 的架构差异出发,对比 Docker 与 Podman 的进程模型、rootless 默认行为、命令行兼容层、Compose 与 systemd/Quadlet 集成、镜像与 registry 互通性,并给出可回退的迁移路径、常见坑位清单与混合共存策略,帮助团队判断该不该迁、怎么迁、迁完如何验证。
从 Linux CFS 调度器与 cgroup v1/v2 CPU 控制器出发,讲解 Docker 的 --cpus、--cpuset-cpus、--cpuset-mems 参数语义与换算,剖析 CPU 节流根因与排查,深入 SCHED_FIFO 实时策略与 RT 带宽,结合 NUMA 拓扑讲解绑核与绑内存节点的远端访问代价,并给出 K8s CPU Manager 对比与生产清单。
围绕 dockerd 进程模型与 docker.service 单元,拆解 Type=notify、Delegate、KillMode、LimitNOFILE 与 TasksMax 语义,讲 docker.socket 按需激活、daemon.json 常用项与校验、drop-in 覆盖与配置优先级、热重载边界,覆盖日志驱动选型与膨胀治理、journald 排障、内核参数、存储 GC 与安全加固。
系统剖析 OCI Image Spec 与 Artifacts 规范:manifest、config、layers 三大组件与 media type、image index 与多架构、artifactType 与 referrers API,把 Helm chart、SBOM、签名作为 OCI 工件推送,并覆盖 OCI layout 与 registry 兼容性差异。
从 BuildKit 内容寻址的缓存模型出发,讲解 cache key 与指令摘要生成规则、cache 挂载持久化依赖目录,深入 cache-from 与 cache-to 的 registry、local、gha 后端写法与参数,剖析 CI 多 job 缓存复用与缓存失效根因(COPY 顺序、apt 元数据、时间戳、ARG 变更),并给出 buildx du 清理与命中率诊断。
从 HEALTHCHECK 的四个时间参数讲到 Compose 的 healthcheck 覆盖、starting/healthy/unhealthy 状态机、四种 restart policy 与退出码语义,再到崩溃循环的指数退避、depends_on 的 service_healthy 依赖编排,以及 compose、Swarm、systemd 三层自愈映射,附生产清单与踩坑表。
从数据目录与 VOLUME 语义出发,讲解 Postgres、MySQL、Redis 的容器化持久化方案:PGDATA 权限与初始化脚本、mysql_native_password 认证坑、Redis AOF 与 RDB 双持久化,以及命名卷选型、pg_dump/pg_basebackup/mysqldump 备份恢复、WAL 与 fsync 语义、共享内存与存储驱动性能陷阱。
系统讲解镜像安全扫描与软件物料清单(SBOM):漏洞扫描原理与 CVE 数据库、Trivy/Grype/Clair 三大扫描器横向对比、CycloneDX/SPDX 两种 SBOM 格式与生成校验、漏洞修复策略(基镜像升级/重建/依赖升降级)、镜像重构与最小化、CI 中的安全门禁与阈值,以及 Harbor/ECR 的持续扫描与合规报告。
深入讲解 containerd 的插件机制与扩展开发:containerd 分层插件架构(核心 vs 插件)、snapshotter/diff/runtime/registry/CNI 等插件类型、shim v2 与自定义运行时接入(runsc/Wasm)、自定义 snapshotter 与懒加载(Nydus/Stargz)、CNI 网络插件集成、与 Docker/Kubernetes 的集成方式,以及 ctr/crictl 调试与生产配置。
系统讲解边缘容器与轻量运行时:边缘设备的资源受限与离线弱网特征、轻量运行时全景(Wasm/runwasi、gVisor、Kata)、WasmEdge 容器化与性能、runsc 用户态内核的隔离边界、边缘 K3s 轻量集群、低功耗 ARM 设备的容器化与资源限制、边缘 OTA 更新与离线运行,以及弱网环境下的监控排障。
系统讲解多集群/多区域镜像同步与分发:镜像分发拓扑设计(Hub-Spoke/区域本地化)、Harbor 复制规则与 ECR 跨区域复制、多集群拉取策略(Registry Mirror/代理缓存)、Dragonfly 与 Nydus 的 P2P 拉取加速与懒加载、全球边缘分发、digest 一致性与 tag 漂移管理,以及复制排障与带宽观测。
深入讲解镜像签名与供应链验证:镜像篡改与混淆攻击威胁模型、Sigstore 与 Cosign 的 keyless 签名机制(Fulcio/Rekor/OIDC)、OCI 1.1 签名与 Referrers 规范、签名验证策略、Kyverno/Connaisseur 准入控制、SBOM 与 SLSA provenance 联动,以及密钥管理、轮换与离线等生产落地问题。
系统讲解 GPU 容器化的完整技术栈:GPU 与容器的隔离模型、NVIDIA Container Toolkit 与 nvidia-container-runtime 架构、CUDA 基础镜像选型与版本匹配、GPU 资源调度与共享(MPS/MIG)、大模型推理容器化部署(vLLM)、多 GPU 与 MIG 切分、Kubernetes 中的 GPU 调度,以及 GPU 容器的监控排障实践。
Docker 容器排障与调试完整实战:定位容器为什么不起来(退出码/启动失败/依赖)、进入容器调试(exec/nsenter/调试镜像)、OOM 与资源问题、镜像拉取与构建失败、日志与事件排查、网络与端口问题,以及一套可复用的排障路径与工具链。
Docker 镜像供应链安全完整实践:镜像威胁模型与攻击面、漏洞扫描(Trivy/Snyk)与门禁、SBOM 生成与维护、镜像签名(Cosign/Notation)与验证、SLSA 供应链合规、多阶段与最小镜像、可信 Registry 与镜像准入。