Docker 笔记(一)镜像篇:分层原理、Dockerfile 写法与镜像瘦身
镜像不是单个文件,是一叠只读层。这篇讲清联合文件系统与写时复制、Dockerfile 每条指令分别产生什么代价、构建缓存怎么命中(为什么改一行代码要重装依赖)、多阶段构建怎么把 1.2G 瘦到 120M,以及基础镜像怎么选。
Java、Spring、消息中间件、数据库与缓存、服务治理的系统性学习笔记,和「排查手记」互为理论与实战。
镜像不是单个文件,是一叠只读层。这篇讲清联合文件系统与写时复制、Dockerfile 每条指令分别产生什么代价、构建缓存怎么命中(为什么改一行代码要重装依赖)、多阶段构建怎么把 1.2G 瘦到 120M,以及基础镜像怎么选。
容器不是一个小型虚拟机,它是被 namespace 隔离、被 cgroup 限制的一个进程。理解了这点,「为什么一启动就退出」「为什么 JVM 以为自己有 64G 内存」「为什么 exit 137」都能自己解释。这篇讲生命周期、run 参数、cgroup 限制与 JVM 的关系、退出码速查、优雅停机和健康检查。
容器的「网络不通」和「文件没权限」是运维群里最高频的两类问题,绝大多数不是 Docker 的 bug,而是网络模型与宿主机的差异没搞清。这篇讲四种网络模式、bridge 到底靠什么打通、-p 与 EXPOSE 的区别、容器间怎么互访、localhost 的陷阱,以及 volume/bind mount/tmpfs 怎么选和权限、时区怎么配。
单个容器好管,一堆容器就靠 Compose。但 Compose 里最容易踩的不是语法,是「启动顺序」和「日志把磁盘吃光」。这篇给一份能直接改用的 Java + MySQL + Redis 编排示例,讲清 depends_on 为什么只等启动不等就绪、日志驱动怎么配才不会撑爆根分区,以及上线前必须过一遍的检查清单。
前四篇是按知识点讲的,这篇是反过来用的:命令忘了、线上出事了,回来翻。上半部分按镜像、容器、网络、存储、Compose、系统清理分组整理常用命令,能直接复制;下半部分是 12 个真实场景案例,每个给出现象、怎么查、结论三步。
一份查漏补缺性质的 Java 基础笔记:String 常量池与不可变性、泛型擦除与通配符、异常体系与最佳实践、反射注解的代价、JDK 8 时间 API、equals/hashCode 契约、Stream 与 Optional 的正确用法。
把 ArrayList、HashMap、ConcurrentHashMap、LinkedHashMap、PriorityQueue 的底层原理、扩容机制和选型建议讲清楚,重点记录 ConcurrentHashMap 的 size 不准、HashMap 死循环、subList 导致 OOM、 Arrays.asList 不可变这些真实踩过的坑。
从 ThreadPoolExecutor 的执行流程讲到生产环境线程池打满的完整排查链路:核心参数怎么算、JUC 常用组件怎么选、Executors 为什么不能用、CompletableFuture 默认线程池的坑,以及一次千万级短信发送任务把线程池压满的真实复盘。
一份能照着操作的 JVM 笔记:运行时数据区、对象创建与回收、G1/ZGC 怎么选、常用启动参数、jstat/jmap/jstack/arthas 的用法,以及一次大报表导出把堆撑爆的真实排查过程。
从 BIO、NIO、AIO 三种模型讲到 Selector、Buffer、Channel 与零拷贝原理,配上文件读写、大文件传输、Socket 编程的实用代码和命令,最后落到 Linux 文件描述符耗尽这类真实生产问题的排查。
Netty 的核心组件与 Reactor 线程模型讲透,包含拆包粘包的四种解法、编解码器选型、心跳保活、ByteBuf 引用计数,以及生产上 DIRECT_MEMORY 泄漏和 EventLoop 阻塞的真实排查过程。
把 Spring 的 IOC 容器、Bean 生命周期、循环依赖、AOP 原理和声明式事务讲清楚,重点整理 @Transactional 不生效的六种真实场景(自调用、非 public、异常被吞、数据库不支持、传播行为、多线程)以及 Bean 注入相关的常见报错。
讲清 Spring Boot 的自动装配与启动流程,整理日常最常写的扩展点(拦截器、全局异常、参数校验、异步、定时任务、优雅停机、Actuator),附一份生产 application.yml 配置清单和启动慢、配置不生效的排查方法。
微服务治理的一份实操笔记:Nacos 注册与配置中心、Gateway 网关路由与限流、OpenFeign 调用与超时重试、Sentinel 熔断降级、分布式链路追踪,以及微服务拆分粒度和线上雪崩的复盘。
MyBatis 与 MyBatis-Plus 的实用笔记:#{} 与 ${} 的区别和注入风险、一级二级缓存的坑、批量插入的三种写法对比、分页插件原理、动态 SQL 与常见错误,以及生产慢 SQL 从发现到优化的完整流程。
Dubbo 的实战笔记:架构角色与调用链路,服务暴露/引用的配置方式,负载均衡与集群容错策略的选型,超时与重试的正确配置(幂等是关键前提),泛化调用与灰度,以及一次服务超时引发连锁故障的复盘。
ZooKeeper 的原理与实战:ZNode 四种节点类型、ZAB 协议与选主过程、Watcher 一次性特性带来的坑、分布式锁与注册中心的正确实现方式,附四字命令与运维要点。
不局限某一种 MQ,先把消息队列的通用命题讲清楚:削峰、解耦、异步、最终一致四大价值,RocketMQ/Kafka/RabbitMQ 的选型对比,以及消息丢失、重复消费、顺序性、堆积、幂等、事务消息这六个绕不开的问题与通用解法。
Kafka 的核心概念与设计要点:Topic/Partition/Replica/ISR 的关系,消费者组与 offset 提交语义,顺序写 + 零拷贝 + 批量压缩为什么能撑起百万吞吐,附生产配置、常用命令和消息积压、重复消费的处理方式。
RocketMQ 从部署到生产的完整笔记:NameServer/Broker/Producer/Consumer 架构与 CommitLog 存储设计,普通/顺序/事务/延迟消息的写法与适用边界,消息堆积与重复消费的排查套路,附常用 mqadmin 命令和一份生产参数配置。
RabbitMQ 的 AMQP 模型讲透:四种 Exchange 的路由规则与选型、手动 ack 与 confirm 机制、死信队列 DLX、延迟消息的两种实现、镜像队列与 quorum queue,附常用管理命令和一次消息堆积把磁盘写满的排查记录。
Redis 的完整实战笔记:五种基础结构的适用场景与命令,缓存穿透/击穿/雪崩的成因与解法,过期与内存淘汰策略,热 key 和大 key 的发现与处理,持久化与主从哨兵配置,附一次缓存雪崩的真实复盘。
一份偏实战的 MySQL 笔记:B+ 树索引结构与最左前缀、索引失效的八种写法、MVCC 与四种隔离级别、行锁/间隙锁/死锁的排查命令,以及慢 SQL 从 EXPLAIN 到优化的完整套路,含一次征期高峰死锁的复盘。
MongoDB 实战笔记:什么时候选文档型而不是关系型,内嵌与引用的取舍,索引与执行计划怎么看,聚合管道的常用阶段,副本集与分片的基本概念,以及一次行为日志把磁盘写满的排查。
Elasticsearch 从原理到生产的笔记:倒排索引与分词、Mapping 字段类型怎么定、term 与 match 的区别、深分页问题、写入调优(refresh/bulk/副本)、集群健康与分片规划,附一次检索超时和一次分片失控的排查。
一份查漏补缺性质的 Java 基础笔记:String 常量池与不可变性、泛型擦除与通配符、异常体系与最佳实践、反射注解的代价、JDK 8 时间 API、equals/hashCode 契约、Stream 与 Optional 的正确用法。
把 ArrayList、HashMap、ConcurrentHashMap、LinkedHashMap、PriorityQueue 的底层原理、扩容机制和选型建议讲清楚,重点记录 ConcurrentHashMap 的 size 不准、HashMap 死循环、subList 导致 OOM、 Arrays.asList 不可变这些真实踩过的坑。
从 ThreadPoolExecutor 的执行流程讲到生产环境线程池打满的完整排查链路:核心参数怎么算、JUC 常用组件怎么选、Executors 为什么不能用、CompletableFuture 默认线程池的坑,以及一次千万级短信发送任务把线程池压满的真实复盘。
一份能照着操作的 JVM 笔记:运行时数据区、对象创建与回收、G1/ZGC 怎么选、常用启动参数、jstat/jmap/jstack/arthas 的用法,以及一次大报表导出把堆撑爆的真实排查过程。
从 BIO、NIO、AIO 三种模型讲到 Selector、Buffer、Channel 与零拷贝原理,配上文件读写、大文件传输、Socket 编程的实用代码和命令,最后落到 Linux 文件描述符耗尽这类真实生产问题的排查。
Netty 的核心组件与 Reactor 线程模型讲透,包含拆包粘包的四种解法、编解码器选型、心跳保活、ByteBuf 引用计数,以及生产上 DIRECT_MEMORY 泄漏和 EventLoop 阻塞的真实排查过程。
把 Spring 的 IOC 容器、Bean 生命周期、循环依赖、AOP 原理和声明式事务讲清楚,重点整理 @Transactional 不生效的六种真实场景(自调用、非 public、异常被吞、数据库不支持、传播行为、多线程)以及 Bean 注入相关的常见报错。
讲清 Spring Boot 的自动装配与启动流程,整理日常最常写的扩展点(拦截器、全局异常、参数校验、异步、定时任务、优雅停机、Actuator),附一份生产 application.yml 配置清单和启动慢、配置不生效的排查方法。
微服务治理的一份实操笔记:Nacos 注册与配置中心、Gateway 网关路由与限流、OpenFeign 调用与超时重试、Sentinel 熔断降级、分布式链路追踪,以及微服务拆分粒度和线上雪崩的复盘。
MyBatis 与 MyBatis-Plus 的实用笔记:#{} 与 ${} 的区别和注入风险、一级二级缓存的坑、批量插入的三种写法对比、分页插件原理、动态 SQL 与常见错误,以及生产慢 SQL 从发现到优化的完整流程。
不局限某一种 MQ,先把消息队列的通用命题讲清楚:削峰、解耦、异步、最终一致四大价值,RocketMQ/Kafka/RabbitMQ 的选型对比,以及消息丢失、重复消费、顺序性、堆积、幂等、事务消息这六个绕不开的问题与通用解法。
Kafka 的核心概念与设计要点:Topic/Partition/Replica/ISR 的关系,消费者组与 offset 提交语义,顺序写 + 零拷贝 + 批量压缩为什么能撑起百万吞吐,附生产配置、常用命令和消息积压、重复消费的处理方式。
RocketMQ 从部署到生产的完整笔记:NameServer/Broker/Producer/Consumer 架构与 CommitLog 存储设计,普通/顺序/事务/延迟消息的写法与适用边界,消息堆积与重复消费的排查套路,附常用 mqadmin 命令和一份生产参数配置。
RabbitMQ 的 AMQP 模型讲透:四种 Exchange 的路由规则与选型、手动 ack 与 confirm 机制、死信队列 DLX、延迟消息的两种实现、镜像队列与 quorum queue,附常用管理命令和一次消息堆积把磁盘写满的排查记录。
Redis 的完整实战笔记:五种基础结构的适用场景与命令,缓存穿透/击穿/雪崩的成因与解法,过期与内存淘汰策略,热 key 和大 key 的发现与处理,持久化与主从哨兵配置,附一次缓存雪崩的真实复盘。
一份偏实战的 MySQL 笔记:B+ 树索引结构与最左前缀、索引失效的八种写法、MVCC 与四种隔离级别、行锁/间隙锁/死锁的排查命令,以及慢 SQL 从 EXPLAIN 到优化的完整套路,含一次征期高峰死锁的复盘。
MongoDB 实战笔记:什么时候选文档型而不是关系型,内嵌与引用的取舍,索引与执行计划怎么看,聚合管道的常用阶段,副本集与分片的基本概念,以及一次行为日志把磁盘写满的排查。
Elasticsearch 从原理到生产的笔记:倒排索引与分词、Mapping 字段类型怎么定、term 与 match 的区别、深分页问题、写入调优(refresh/bulk/副本)、集群健康与分片规划,附一次检索超时和一次分片失控的排查。
Dubbo 的实战笔记:架构角色与调用链路,服务暴露/引用的配置方式,负载均衡与集群容错策略的选型,超时与重试的正确配置(幂等是关键前提),泛化调用与灰度,以及一次服务超时引发连锁故障的复盘。
ZooKeeper 的原理与实战:ZNode 四种节点类型、ZAB 协议与选主过程、Watcher 一次性特性带来的坑、分布式锁与注册中心的正确实现方式,附四字命令与运维要点。