章节摘要:本章跟着一条线走——把你自己的应用从"一堆代码"装箱成"一只标准箱",中途拆开看分层原理、学写装箱单、给箱子减重,最后给自己的货物建一座专属堆场。这是从"用容器"到"交付容器"的分水岭。
前两章你提的货都是别人装好的箱子。从本章起,你在车间里有了一自己的工位:把你自己的应用装进标准箱,并且装得又快又省又规范。
主线任务围绕一次真实装箱展开:假设手里有一个依赖若干库的 Web 应用,目标是产出一个体积小、可复现、能直接推上堆场的镜像。要完成它,五个站点依次过:
每一站都直接服务于主线任务:不懂分层就写不出高效装箱单;不懂货单规则就无法与堆场顺畅往来;装箱单写法是核心手艺;减重是专业与业余的分界线;专属堆场则让你的成品有了正式的存放与分发渠道。
补一条车间守则:本章所有练习共用同一个样例应用——从 3.3 写出第一版装箱单,到 3.4 把它瘦身,再到 3.5 推上自建堆场,一票货从头走到尾。中途不要换货,前后对比才看得清每一步改进到底改在哪里。
拆开一只现成的箱子:镜像由只读层堆叠而成,容器只是最上面多出的一层可写层。这一站用 history 与 inspect 命令亲眼看分层,理解层共享为什么让存储与传输都高效。这是全章的理论地基。
把 2.3 的入门操作升级成体系:标签策略、内容摘要、多堆场之间的推拉规则,以及官方堆场与企业内网堆场的分工。这一站让你在任何网络环境下都能管理自己的货。
核心手艺站。逐条讲透 FROM、RUN、COPY、CMD、ENTRYPOINT 等指令的语义与陷阱,重点讲指令顺序如何影响层缓存——写对了,重复构建快十倍。这一站结束,你能为任意应用写出合格的装箱单。
业余与专业的分界线。同一个应用,随手装出来几百 MB,用心装箱只有几十 MB。这一站用前后对比实验讲多阶段构建、轻量基础镜像与清理技巧,产出一份可执行的瘦身清单。
主线收官。用官方 registry 镜像十分钟搭起企业内网专属堆场,配置访问控制,打通 push 与 pull。从此你的镜像有了一个不依赖外网的正式家。
本章最重要的认知转折在 3.1 到 3.3 之间:Dockerfile 不是"安装脚本",而是"层的声明序列"。脚本思维关心"执行了哪些命令",层思维关心"每条指令制造了多大多不可变的层、缓存何时失效"。想通这一点,很多最佳实践不再是需要背诵的教条,而是自然推论——比如为什么先 COPY 清单文件再装依赖、为什么把变动最频繁的指令放最后、为什么一行 RUN 里用完即清。
第二个转折在 3.4:镜像体积不是"压缩"问题,而是"层里装了什么"的问题。删除文件的指令不会让下面的层变小,只会多一层"删除记录";真正的瘦身靠多阶段构建把"生产废料"(编译器、缓存、临时文件)留在车间,只把成品装进终箱。
本章落点一句话:镜像 = 分层的不可变交付物,Dockerfile = 对每一层的可审计声明。写出好装箱单的人,交付质量下限立刻高一档。
动手预算提醒:本章练习会真实地下载基础镜像与依赖(首次约几百 MB 流量),建议在稳定网络下进行;3.5 节自建堆场需要约 100 MB 磁盘余量,做完记得按文中步骤清理演习用的容器与卷。
箱子装好了、瘦了身、上了堆场,就差起吊了。第 4 章进入起吊作业:容器的创建、启动、停止与销毁,以及监控它的一切——那些在车间里看不见的运行时故事,都在船上。