<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker on Zampo Blog</title><link>https://blog.cpdd.fyi/tags/docker/</link><description>Recent content in Docker on Zampo Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 20:00:00 +0800</lastBuildDate><atom:link href="https://blog.cpdd.fyi/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>你的 Docker 镜像为什么有 2GB：从 Namespaces 到 Dockerfile 最佳实践</title><link>https://blog.cpdd.fyi/posts/docker-deep-dive-namespaces-cgroups/</link><pubDate>Thu, 23 Apr 2026 20:00:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/docker-deep-dive-namespaces-cgroups/</guid><description>&lt;p&gt;凌晨三点，线上容器启动要三分钟。&lt;/p&gt;
&lt;p&gt;你登上服务器，&lt;code&gt;docker images&lt;/code&gt; 一看：2.1GB。PM 问为什么这么慢，你说&amp;quot;容器已经很快了&amp;quot;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但容器不是虚拟机。你把 Docker 当 VM 用，它当然慢。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;问题不在 Docker，在你没理解它到底是什么。&lt;/p&gt;
&lt;p&gt;很多人以为 Docker 只是把代码和依赖打包进一个盒子，但依然不知道为什么上了生产就崩。你可能正在给一个简单的 Node.js 应用构建 2GB 的镜像，硬编码环境变量，容器启动要三分钟。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;容器不是虚拟机。&lt;/strong&gt; 它不需要 hypervisor，不需要臃肿的 guest OS。它是一个与宿主机内核直接共享的进程。&lt;/p&gt;
&lt;p&gt;看完这篇，你能写出高效 Dockerfile，不再把容器当虚拟机用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一容器-vs-vm为什么你的镜像这么大"&gt;一、容器 vs VM：为什么你的镜像这么大&lt;/h2&gt;
&lt;p&gt;虚拟机通过 hypervisor 模拟物理硬件。每个 VM 运行独立的操作系统和应用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VM 有三大痛点：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;痛点&lt;/th&gt;
 &lt;th&gt;表现&lt;/th&gt;
 &lt;th&gt;后果&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;资源税&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;每个 VM 都带着完整的内核&lt;/td&gt;
 &lt;td&gt;10 个 VM 就是 10 份 Linux 内核，内存和 CPU 大量浪费&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;启动延迟&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;启动一个完整操作系统需要几分钟&lt;/td&gt;
 &lt;td&gt;微服务时代根本等不起&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;体积庞大&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;VM 镜像通常几个 GB&lt;/td&gt;
 &lt;td&gt;存储和传输都很慢&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Docker 虚拟化的是操作系统，不是硬件。容器共享宿主机内核，只隔离用户空间的进程、库和依赖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;容器优势：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;快：通常秒级启动&lt;/li&gt;
&lt;li&gt;轻：不需要独立 OS，内存和 CPU 占用小&lt;/li&gt;
&lt;li&gt;可移植：应用和依赖打包在一起，任意环境一致运行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.cpdd.fyi/images/docker-deep-dive/vm-vs-container.svg" alt="容器 vs VM 架构对比"&gt;&lt;/p&gt;</description></item></channel></rss>