<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>容器 &#8211; mylogs.cn</title>
	<atom:link href="https://mylogs.cn/tag/%e5%ae%b9%e5%99%a8/feed/" rel="self" type="application/rss+xml" />
	<link>https://mylogs.cn</link>
	<description>发现、记录、分享</description>
	<lastBuildDate>Sat, 15 Aug 2026 12:01:32 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Win11 免 Docker 跑 Linux 容器，实测踩了三个坑</title>
		<link>https://mylogs.cn/win11-%e5%85%8d-docker-%e8%b7%91-linux-%e5%ae%b9%e5%99%a8%ef%bc%8c%e5%ae%9e%e6%b5%8b%e8%b8%a9%e4%ba%86%e4%b8%89%e4%b8%aa%e5%9d%91/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 12:01:32 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WSL]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[开发环境]]></category>
		<guid isPermaLink="false">https://mylogs.cn/win11-%e5%85%8d-docker-%e8%b7%91-linux-%e5%ae%b9%e5%99%a8%ef%bc%8c%e5%ae%9e%e6%b5%8b%e8%b8%a9%e4%ba%86%e4%b8%89%e4%b8%aa%e5%9d%91/</guid>

					<description><![CDATA[在 Windows 上跑容器，多数人绕不开 Docker Desktop：常驻托盘、崩溃之后重启要等好几秒，还 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">在 Windows 上跑容器，多数人绕不开 Docker Desktop：常驻托盘、崩溃之后重启要等好几秒，还得点一次权限确认弹窗。微软在最新的 WSL 预览版里塞进了 WSL Containers（命令行工具名 wslc，直接用 WSL 跑 OCI 容器，不再依赖 Docker 或 Podman），XDA 撰稿人拿它和 Docker Desktop 做了对照实测，结论是开发场景可以换，长期常驻的家庭服务器还不行。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a89efb02266d&quot;}" data-wp-interactive="core/image" data-wp-key="6a89efb02266d" class="wp-block-image size-large aligncenter wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/cdf9eeec9709350ad4ee855b2a73bc1a_header.webp" alt="Win11 免 Docker 跑 Linux 容器，实测踩了三个坑" class="wp-image-4965" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/cdf9eeec9709350ad4ee855b2a73bc1a_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/cdf9eeec9709350ad4ee855b2a73bc1a_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/cdf9eeec9709350ad4ee855b2a73bc1a_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/cdf9eeec9709350ad4ee855b2a73bc1a_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：XDA Developers</figcaption></figure>





<p class="wp-block-paragraph">差异出在架构：Docker Desktop 的引擎跑在 WSL 共享虚拟机里，wslc 则每启一个容器就单独建一台私有虚拟机。好处是每次启动环境完全一致，坏处是内存和管理方式都得重新适应。</p>



<h2 class="wp-block-heading">一、开启只要一条命令</h2>



<ol class="wp-block-list"><li>执行 <code>wsl --update --pre-release</code> 升级到预览版，wslc 命令随之可用。</li><li>先记住收尾命令 <code>wslc system session terminate</code>，原因见下一节。</li></ol>



<h2 class="wp-block-heading">二、先学会清残留虚拟机</h2>



<ol class="wp-block-list"><li>Docker Desktop 空载时含特权 Windows 服务一起算，占用不到 200 MB 内存；而跑一个 wslc 容器会新建一台以用户名命名的虚拟机，吃掉约 1.5 GB。</li><li>微软称容器用完即消失——容器确实消失了，但托着内存的虚拟机不会，手动执行 WSL 关机也杀不掉。唯一解法是 <code>wslc system session terminate</code>，这条命令藏在三层子命令之下，wslc 自己也不会提示。</li><li>更费内存的是连带效应：启动一个 wslc 容器会同时唤起一份全新的 WSL 共享虚拟机，并把已装的 Ubuntu 重新标记为运行中，一个空闲的命令行提示符合计吃掉 3.4 GB 内存。</li></ol>



<h2 class="wp-block-heading">三、速度实测：差距小到感觉不到</h2>



<ol class="wp-block-list"><li>早期报道称 wslc 启动容器不到一秒，Docker Desktop 要三到八秒。用 alpine 镜像配合计时脚本冷热各跑一轮，结果是热启动 wslc 357 至 384 毫秒、Docker Desktop 426 至 463 毫秒；冷启动（会话已终止或应用已退出）wslc 2387 至 2611 毫秒、Docker Desktop 2629 至 2973 毫秒。</li><li>只有 Docker 非正常退出才拉开差距：强制结束进程后冷启动要 6667 毫秒，连辅助进程一起杀掉则是 9108 毫秒，其中包含一次权限确认弹窗。</li><li>真正的优势是稳定：六次 wslc 启动全部落在 224 毫秒区间内，因为私有虚拟机不继承任何状态，无论怎么被强行拆掉都没有残留需要修复。</li></ol>



<h2 class="wp-block-heading">四、显卡能用，端口有坑</h2>



<ol class="wp-block-list"><li>GPU 加速开箱可用：一个标准的 CUDA 12.4 镜像立刻认出 RTX 5090，只需加 <code>--gpus-all</code> 参数，不必在容器里折腾驱动，宿主机装 CUDA 13.3 驱动同样正常。注意这是显卡半虚拟化而非独占直通，显存和 Windows 桌面共用，规划时要留余量。</li><li>网络默认绑定 127.0.0.1，而不是 Docker 习惯的 0.0.0.0。测试 nginx 时必须显式发布到 0.0.0.0 才通，且会弹出一条归属于 COM Surrogate 的防火墙提示——正是很多人误当成病毒的那种弹窗。</li></ol>



<h2 class="wp-block-heading">五、Compose 目前靠社区补丁</h2>



<ol class="wp-block-list"><li>截至 2.9.3 版本，<code>wslc compose</code> 仍然不可用。社区项目 wslc-compose 用一层轻量 Python 转译补上了这个缺口，通过 pipx（Python 命令行工具的隔离安装器）装好即可。</li><li>实测拿 nginx 加 Postgres 两个服务、配置里写上依赖顺序，结果正常跑通：生成项目独立网络、数据库先于 Web 容器启动、两容器共用去重后的 Alpine 基础层，<code>down -v</code> 也能连网络一起清干净。</li></ol>



<h2 class="wp-block-heading">注意事项</h2>



<ol class="wp-block-list"><li>参数还不全：没有特权模式、设备直通和重启策略，会话一断里面的东西全没，常驻服务不适合搬过来。</li><li>可见性是短板：Docker 的容器摆在图形界面里，wslc 得靠命令行才能看清有什么在跑，目前还没有对应的管理界面。</li></ol>



<p class="wp-block-paragraph">来源：XDA Developers</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多</title>
		<link>https://mylogs.cn/kubernetes-%e9%87%8c%e8%ae%be%e4%ba%86-cpu-%e9%99%90%e5%88%b6%ef%bc%8c%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%af%e8%83%bd%e6%af%94%e6%83%b3%e8%b1%a1%e4%b8%ad%e6%85%a2%e5%be%97%e5%a4%9a/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 11:39:39 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[云原生]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[运维]]></category>
		<guid isPermaLink="false">https://mylogs.cn/kubernetes-%e9%87%8c%e8%ae%be%e4%ba%86-cpu-%e9%99%90%e5%88%b6%ef%bc%8c%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%af%e8%83%bd%e6%af%94%e6%83%b3%e8%b1%a1%e4%b8%ad%e6%85%a2%e5%be%97%e5%a4%9a/</guid>

					<description><![CDATA[Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多 在 Kubernetes 集群中给容器 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多</h2>



<p class="wp-block-paragraph">在 Kubernetes 集群中给容器设置 <code>limits.cpu</code> 是很多团队的标准操作。但一项基于真实集群的对照测试表明：<strong>CPU 限制不仅不能保护邻居 Pod，反而会让被限制的应用频繁冻结、尾延迟飙升、启动时间翻倍。</strong></p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a89efb023f6a&quot;}" data-wp-interactive="core/image" data-wp-key="6a89efb023f6a" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="600" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header.webp" alt="Kubernetes 里设了 CPU 限制，你的应用可能比想象中慢得多" class="wp-image-4829" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header-300x150.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header-1024x512.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/572e71a8c5fa1641c907b7cf50dfa30f_header-768x384.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：GitHub／k8s-cpu-limits-analyzed 项目页</figcaption></figure>





<h2 class="wp-block-heading">CPU 请求与限制是两回事</h2>



<p class="wp-block-paragraph">Kubernetes 中每个 Pod 可以声明两种 CPU 参数：</p>



<p class="wp-block-paragraph">&#8211; <strong>request（请求）</strong>：告诉调度器「这个 Pod 至少需要多少算力」。调度器按 request 总和放置 Pod，确保节点容量不被超卖。
&#8211; <strong>limit（限制）</strong>：一个硬性天花板。一旦 Pod 在某个时间窗口内用完配额，Linux 内核会直接冻结整个容器。</p>



<p class="wp-block-paragraph">测试在同一台 4 核节点上部署了两个完全相同的 .NET 10 API 服务。两者都请求 250m（四分之一核）CPU，唯一的区别是一个设了 500m 的 limit，另一个不设。</p>



<h2 class="wp-block-heading">内核如何执行限制</h2>



<p class="wp-block-paragraph">Linux 以 <strong>100 毫秒</strong>为周期执行 CPU 配额管理。500m 的 limit 意味着每个窗口只有 50 毫秒的实际 CPU 时间可用。预算耗尽后，内核冻结整个容器的所有线程——包括 HTTP 处理器、后台消费者和垃圾回收器。</p>



<p class="wp-block-paragraph">一个运行 8 个繁忙线程的服务可以在约 12.5 毫秒内耗尽全部配额。这意味着<strong>每秒最多发生 10 次冻结</strong>。</p>



<p class="wp-block-paragraph">更隐蔽的是：如果只看 1 分钟平均 CPU 使用率，仪表盘看起来一切正常——平均值远低于 limit，但应用实际上整天都在被节流。正确的监控指标是 <code>container_cpu_cfs_throttled_periods_total</code>。</p>



<h2 class="wp-block-heading">实测数据：延迟与吞吐量</h2>



<p class="wp-block-paragraph">测试向两个服务发送相同负载：</p>



<p class="wp-block-paragraph">&#8211; <strong>慢请求变慢 2.4 倍</strong>：即使平均负载只需 320m（远低于 500m 的 limit），受限服务的慢请求延迟仍是不受限版本的 2.4 倍。
&#8211; <strong>尖峰吸收能力归零</strong>：流量突增时，受限服务在 <strong>89% 的时间窗口内处于冻结状态</strong>；无限制服务则轻松吸收了 12 倍的突发流量，零降速。
&#8211; <strong>启动时间缩短约一半</strong>：CPU 密集型的编译/初始化工作完成速度提升近一倍（具体倍数取决于服务启动阶段 I/O 占比）。</p>



<h2 class="wp-block-heading">「吵闹邻居」真的存在吗？</h2>



<p class="wp-block-paragraph">最常见的担忧是：不加限制的 Pod 会抢光整台机器的资源。测试专门验证了这个场景——在同一节点上放了一个持续吃满 CPU 的「吵闹邻居」Pod：</p>



<p class="wp-block-paragraph">&#8211; 无限制受害者的 P99 延迟变化不到 7 毫米，且从未触发节流。<strong>CPU request 本身就是保护伞</strong>——CFS 调度器按权重分配资源，空闲份额会被借走，工作一来立刻归还。
&#8211; 有 500m 限制的受害者反而被节流了 0.29% 的时间窗口，P99 延迟并未改善。</p>



<p class="wp-block-paragraph">结论很明确：<strong>限制保护不了邻居，只能伤害自己。</strong></p>



<h2 class="wp-block-heading">为什么内存限制应该保留</h2>



<p class="wp-block-paragraph">CPU 和内存有本质区别：</p>



<ul class="wp-block-list">
<li>CPU | 应用变慢，稍后补上 | <strong>去掉 limit，保留 request</strong></li>
<li>内存 | 应用直接崩溃（OOM Kill） | <strong>保留 limit</strong></li>
</ul>



<h2 class="wp-block-heading">成本影响：多数集群预留了大量闲置算力</h2>



<p class="wp-block-paragraph">测试提供了一个说明性的成本模型：去掉不必要的 CPU 限制并重新调整 request 后，<strong>单个集群每年可节省数万美元</strong>的硬件开支。大多数集群的实际 CPU 利用率长期停留在个位数或低两位数，而限制让本可借用的空闲算力白白浪费。</p>



<h2 class="wp-block-heading">正确的做法</h2>



<p class="wp-block-paragraph">1. <strong>保留 CPU request</strong>：它是真正的资源保障，也是 CFS 权重的来源。
2. <strong>去掉 CPU limit</strong>：除非使用 Guaranteed QoS + 静态 CPU Manager 绑核这一特定场景。
3. <strong>先加 LimitRange</strong>：给未显式声明 request 的 Pod 设定默认值，一条清单即可生效。
4. <strong>再补 ResourceQuota</strong>：按命名空间控制总 request 上限，守护成本而非稳定性。</p>



<p class="wp-block-paragraph"><strong>重要提醒</strong>：不能用被节流状态下测到的 CPU 用量来设定新的 limit 值——那个数字反映的是 limit 允许了多少，而不是应用真正需要多少。</p>



<p class="wp-block-paragraph">来源：GitHub 项目 k8s-cpu-limits-analyzed（inevolin）</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker 看着吓人？先记住这七条终端命令</title>
		<link>https://mylogs.cn/docker-%e7%9c%8b%e7%9d%80%e5%90%93%e4%ba%ba%ef%bc%9f%e5%85%88%e8%ae%b0%e4%bd%8f%e8%bf%99%e4%b8%83%e6%9d%a1%e7%bb%88%e7%ab%af%e5%91%bd%e4%bb%a4/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 11:27:06 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[效率工具]]></category>
		<guid isPermaLink="false">https://mylogs.cn/docker-%e7%9c%8b%e7%9d%80%e5%90%93%e4%ba%ba%ef%bc%9f%e5%85%88%e8%ae%b0%e4%bd%8f%e8%bf%99%e4%b8%83%e6%9d%a1%e7%bb%88%e7%ab%af%e5%91%bd%e4%bb%a4/</guid>

					<description><![CDATA[一、为什么 Docker 让人犯怵 第一次接触 Docker 的人，往往被镜像、容器、卷、端口、Compose [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">一、为什么 Docker 让人犯怵</h2>



<p class="wp-block-paragraph">第一次接触 Docker 的人，往往被镜像、容器、卷、端口、Compose 文件和满屏命令劝退，以为必须懂开发才能上手。镜像（image）可以理解成打包好的应用「蓝图」，容器（container）则是照蓝图跑起来的运行实例，二者并不相同。MakeUseOf 一位撰稿人分享，他真正跑起几个自托管应用后才发现，日常反复用的其实就是那么七八条命令。先把这七条记熟，Docker 就不再难懂。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a89efb025230&quot;}" data-wp-interactive="core/image" data-wp-key="6a89efb025230" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header.webp" alt="Docker 看着吓人？先记住这七条终端命令" class="wp-image-4824" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<h2 class="wp-block-heading">二、七条核心命令</h2>



<ol class="wp-block-list"><li>docker pull nginx：从镜像仓库下载名为 nginx 的镜像，相当于把「原材料」备好；</li><li>docker run -d &#8211;name myserver -p 8080:80 nginx：把镜像变成运行中的容器；-d 后台运行，&#8211;name 起名，-p 把本机 8080 端口映射到容器内 80 端口；</li><li>docker ps：查看正在运行的容器名称、状态、镜像与端口；加 -a（docker ps -a）可看已停止的；</li><li>docker logs myserver：查看容器输出日志，定位启动报错、配置或连接问题；加 -f 实时跟踪；</li><li>docker exec -it myserver sh：进入容器内部开一个交互终端，像在本机一样查文件、跑命令；</li><li>docker stop myserver：用完先停而非删，容器保留在系统里，下次一条命令就能再起；</li><li>docker rm myserver：确定不再需要时彻底删除容器（镜像仍在）。</li></ol>



<p class="wp-block-paragraph">一个最小流程就是：pull 拉镜像、run 起容器、ps 确认在跑、logs 排错、stop 收工。</p>



<h2 class="wp-block-heading">三、理解工作流就不慌</h2>



<p class="wp-block-paragraph">镜像像图纸，容器是照图纸跑起来的实体。端口映射（-p 8080:80）的意思是：在浏览器访问本机 8080，流量会被转进容器里的 80 端口，这样外面的电脑才能打开容器里的服务。七条命令足以起步，其余等踩坑时现学现用。</p>



<h2 class="wp-block-heading">注意事项</h2>



<p class="wp-block-paragraph">docker pull 并非每次必用，Docker 在 run 时缺镜像会自动补拉，但理解「镜像与容器」的关系能少走很多弯路。myserver 只是容器名占位符，换成自己实际名字即可；忘了名字就 docker ps 看 NAMES 列。删除容器前若仍在运行，要先 docker stop 再 docker rm，否则会报错。</p>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NAS 别啥都装：哪些服务该留、哪些该挪</title>
		<link>https://mylogs.cn/nas-%e5%88%ab%e5%95%a5%e9%83%bd%e8%a3%85%ef%bc%9a%e5%93%aa%e4%ba%9b%e6%9c%8d%e5%8a%a1%e8%af%a5%e7%95%99%e3%80%81%e5%93%aa%e4%ba%9b%e8%af%a5%e6%8c%aa/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Wed, 12 Aug 2026 16:11:21 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[家庭网络]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[数据备份]]></category>
		<category><![CDATA[服务器]]></category>
		<guid isPermaLink="false">https://mylogs.cn/nas-%e5%88%ab%e5%95%a5%e9%83%bd%e8%a3%85%ef%bc%9a%e5%93%aa%e4%ba%9b%e6%9c%8d%e5%8a%a1%e8%af%a5%e7%95%99%e3%80%81%e5%93%aa%e4%ba%9b%e8%af%a5%e6%8c%aa/</guid>

					<description><![CDATA[买了 NAS，只用来存文件总觉得亏；可一旦把容器一个接一个往上堆，某天 NAS 一重启，家里半个网络也跟着瘫— [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">买了 NAS，只用来存文件总觉得亏；可一旦把容器一个接一个往上堆，某天 NAS 一重启，家里半个网络也跟着瘫——DNS 没了、监控看不了、正在跑的备份也断了。XDA 撰稿人 Jeff Butts 在多年运维里总结出一条中间线：让 NAS 承担「本来就围着它存的数据转」的任务，但在「整台机器都依赖它」之前停下。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a89efb026155&quot;}" data-wp-interactive="core/image" data-wp-key="6a89efb026155" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/5239bac55e53fe0a6b3027ecbaa248aa_header.webp" alt="NAS 别啥都装：哪些服务该留、哪些该挪" class="wp-image-4608" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/5239bac55e53fe0a6b3027ecbaa248aa_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/5239bac55e53fe0a6b3027ecbaa248aa_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/5239bac55e53fe0a6b3027ecbaa248aa_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/5239bac55e53fe0a6b3027ecbaa248aa_header-768x432.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：XDA Developers</figcaption></figure>





<h2 class="wp-block-heading">一、适合放在 NAS 上的：数据密集型服务</h2>



<p class="wp-block-paragraph">判断标准很简单：这个服务大部分时间都在读、写、整理或保护 NAS 上的文件。</p>



<ol class="wp-block-list"><li>媒体服务器：Jellyfin、Plex 本就常读 NAS 里的影音，跑在 NAS 上省掉一台机器和一道网络挂载。只要 NAS 的算力够转码，比另起一台更合理。</li><li>照片管理、文档归档、下载工具（如 qBittorrent、Transmission）：它们几乎只跟 NAS 里的文件打交道，放在别处徒增网络往返。</li><li>备份软件：NAS 本就是集中存重要副本的地方，让它接收、排程、整理或复制备份，是顺理成章的延伸——当然这不意味着 NAS 就是全部备份策略，尤其当原始数据也在上面时。</li></ol>



<h2 class="wp-block-heading">二、整合能省下的维护成本</h2>



<p class="wp-block-paragraph">家里每多一台常年开机的设备，就多一份更新、监控、备份和「它啥时候挂了」的心智负担。把媒体服务器、几个下载工具和存储类工具并到 NAS 上，既能减负，又把独立硬件留给真正需要的活儿。排错也更省事：应用主要跟 NAS 数据打交道时，出问题只需在 NAS 一台机器上理清应用、权限、存储，不必先跨三台设备追同一处故障。</p>



<h2 class="wp-block-heading">三、必须留在 NAS 之外的：需要独立存活的服务</h2>



<p class="wp-block-paragraph">诱惑往往从这开始：媒体服务器装完，又加一个容器，再加一个，NAS 眼看要吞下半个数家庭实验室。硬件能跑，不等于该跑。划线的标准是：NAS 宕机时，你还需不需要它。</p>



<ol class="wp-block-list"><li>基础设施类：比如 DNS。若全屋 DNS 只跑在 NAS 上，一次例行维护就会从「存储问题」升级成「网络问题」。管理、监控类工具同理——你正排查 NAS 故障时，恰恰需要它们还在线。</li><li>重计算类：大型虚拟机、开发环境、数据库等会和存储服务抢 CPU、内存与磁盘 I/O；当不得不为这些不相关的程序让路、绕着排期做存储维护时，整合就已经过头了。</li></ol>



<h2 class="wp-block-heading">四、一条好用的判断口诀</h2>



<p class="wp-block-paragraph">问一句：NAS 要是掉线，这项服务会不会也把「排查网络／恢复系统」所需的能力一起带走？会，就挪到别处；不会，就留下。对多数家庭用户，一台 NAS 配一台小型辅助机，就足以在「存储相关应用」和「基础设施／实验／重计算」之间划出边界——既保留整合的便利，又不让所有鸡蛋落在同一个篮子里。</p>



<h2 class="wp-block-heading">注意事项</h2>



<p class="wp-block-paragraph">群晖 DSM、威联通或绿联等主流 NAS 都提供容器管理器（套件中心／Container Station／Container Manager），上述思路与具体品牌无关。整合的甜头是省机器、省电、易维护；底线是别让 NAS 变成「牵一发而动全身」的单一依赖。让 NAS 做好它擅长的事，比把它塞成全能服务器更稳妥。</p>



<p class="wp-block-paragraph">来源：XDA Developers</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker越用越乱？一个面板管住所有容器</title>
		<link>https://mylogs.cn/docker%e8%b6%8a%e7%94%a8%e8%b6%8a%e4%b9%b1%ef%bc%9f%e4%b8%80%e4%b8%aa%e9%9d%a2%e6%9d%bf%e7%ae%a1%e4%bd%8f%e6%89%80%e6%9c%89%e5%ae%b9%e5%99%a8/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 10:51:19 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[存储清理]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[效率工具]]></category>
		<category><![CDATA[自托管]]></category>
		<guid isPermaLink="false">https://mylogs.cn/docker%e8%b6%8a%e7%94%a8%e8%b6%8a%e4%b9%b1%ef%bc%9f%e4%b8%80%e4%b8%aa%e9%9d%a2%e6%9d%bf%e7%ae%a1%e4%bd%8f%e6%89%80%e6%9c%89%e5%ae%b9%e5%99%a8/</guid>

					<description><![CDATA[用 Docker 部署自建服务的人，大多经历过同一个阶段：最初只跑一两个容器，命令行足够应付；等到容器数量涨到 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">用 Docker 部署自建服务的人，大多经历过同一个阶段：最初只跑一两个容器，命令行足够应付；等到容器数量涨到五六个，问题就集中爆发——硬盘空间莫名其妙被吃光，某些容器启动缓慢甚至起不来，升级一个镜像之后服务就出故障。How-To Geek 撰稿人回忆，自己刚接触 Docker 的第一周完全靠终端管理，那段经历&#8221;相当难受&#8221;。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a89efb027174&quot;}" data-wp-interactive="core/image" data-wp-key="6a89efb027174" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/c99288d6e68477d256bb0fdad5c49772_header-1.webp" alt="Docker越用越乱？一个面板管住所有容器" class="wp-image-3297" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/c99288d6e68477d256bb0fdad5c49772_header-1.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/c99288d6e68477d256bb0fdad5c49772_header-1-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/c99288d6e68477d256bb0fdad5c49772_header-1-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/c99288d6e68477d256bb0fdad5c49772_header-1-768x432.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：How-To Geek</figcaption></figure>





<p class="wp-block-paragraph">麻烦的根源在于 Docker 的清理逻辑并不直观：删掉一个容器，并不会同时删掉它的镜像和数据。久而久之，隐藏的构建缓存、残留的持久卷和无人使用的镜像层层堆积，占用的空间远超预期。</p>



<h2 class="wp-block-heading">第一步：先查清空间到底去哪了</h2>



<p class="wp-block-paragraph">在动手删任何东西之前，应当先看清占用结构。</p>



<ol class="wp-block-list"><li>在终端执行 <code>docker system df</code>，查看镜像、容器、卷和构建缓存各自占用多少空间，以及其中有多少属于&#8221;可回收&#8221;。</li><li>确认存在大量悬空镜像和已停用容器后，再执行 <code>docker system prune --all</code> 进行清理。</li><li>如果构建缓存仍然庞大，追加执行 <code>docker builder prune</code> 单独清掉缓存。</li></ol>



<p class="wp-block-paragraph">需要特别提醒的是，<code>docker system prune --all</code> 会删除所有已停止的容器、没有被任何容器使用的网络，以及全部未使用的镜像。这条命令不能盲目执行——原文作者正是吃过这个亏才总结出经验。清理完成后，再逐个回看哪些容器仍在日常使用，把长期闲置的手动移除即可，需要时重新拉取并不困难。</p>



<h2 class="wp-block-heading">第二步：把日常管理交给容器面板</h2>



<p class="wp-block-paragraph">命令行清理虽然可行，却既繁琐又容易误伤。更省心的做法是加装一个容器管理器，例如 Portainer。装好之后，日常操作基本都能在网页界面里完成：</p>



<ol class="wp-block-list"><li>打开容器列表，直接查看每个容器占用的端口。容器超过六个时，这一项能有效避免端口冲突。</li><li>查看运行状态与健康状况。运行/停止状态一目了然，可以避免在执行清理命令时误删处于停止状态但仍需保留的容器。</li><li>点开日志排查故障，无需再敲一长串命令。</li><li>进入 Stacks 视图管理编排。该视图本质上是 Docker Compose 文件的图形界面，可直观判断各套编排是否正常运行。</li><li>在卷管理页面增删数据卷。列表形式能看清哪些卷还在使用、哪些可以安全清除，减少误删重要数据的概率。</li><li>需要进入容器内部时，直接调用网页终端。</li></ol>



<h2 class="wp-block-heading">更轻量的替代方案</h2>



<p class="wp-block-paragraph">Portainer 并非唯一选择。另一款常见工具是 Lazydocker，它是终端界面工具而非网页服务，因此资源占用更低，操作路径也更简洁。Portainer 社区版与 Lazydocker 均为开源项目，可按硬件条件自行取舍：家用小主机或树莓派资源紧张时，Lazydocker 更合适；需要多人查看、远程操作时，网页版的 Portainer 更方便。</p>



<h2 class="wp-block-heading">注意事项</h2>



<p class="wp-block-paragraph">管理面板本身也占用一定资源，但相较于误删数据、排查端口冲突所耗费的时间，这点开销通常划算。清理命令与面板操作可以配合使用：先在面板中确认容器状态，再决定是否执行批量清理，比直接在终端里&#8221;一把梭&#8221;稳妥得多。</p>



<p class="wp-block-paragraph">来源：How-To Geek</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
