<?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 YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/docker/</link><description>Recent content in Docker on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 04 Jul 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/docker/feed.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes 完整指南（一）：基礎概念與架構詳解</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/kubernetes-complete-guide-part1-introduction-zh/</link><pubDate>Sat, 11 Oct 2025 12:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/kubernetes-complete-guide-part1-introduction-zh/</guid><description>🎯 前言 Kubernetes（常簡稱為 K8s）是目前最流行的容器編排平台，已成為雲原生應用的事實標準。本系列文章將全面介紹 Kubernetes 的核心概念、實務操作與生產部署。
本系列文章規劃：
第一篇（本文）：Kubernetes 基礎概念與架構 第二篇：核心資源與實務操作 第三篇：進階功能與生產實踐 📚 什麼是 Kubernetes？ 核心定義 Kubernetes 是一個開源的容器編排平台，用於自動化部署、擴展和管理容器化應用程式。它最初由 Google 設計，現在由 Cloud Native Computing Foundation（CNCF）維護。
graph TB A[Kubernetes] --&amp;gt; B[容器編排] A --&amp;gt; C[自動化部署] A --&amp;gt; D[服務發現] A --&amp;gt; E[負載均衡] A --&amp;gt; F[自動擴展] A --&amp;gt; G[自我修復] B --&amp;gt; B1[管理數千個容器] C --&amp;gt; C1[滾動更新&amp;lt;br/&amp;gt;零停機部署] D --&amp;gt; D1[DNS 與服務註冊] E --&amp;gt; E1[流量分發&amp;lt;br/&amp;gt;健康檢查] F --&amp;gt; F1[水平/垂直擴展&amp;lt;br/&amp;gt;自動調度] G --&amp;gt; G1[故障恢復&amp;lt;br/&amp;gt;重啟容器] style A fill:#326ce5 style B fill:#4ecdc4 style C fill:#feca57 style D fill:#ff6b6b style E fill:#a8e6cf style F fill:#ffb3ba style G fill:#bae1ff Kubernetes 解決的問題 挑戰 傳統方式 Kubernetes 解決方案 容器管理 手動管理每個容器 聲明式配置，自動管理 服務發現 硬編碼 IP 位址 內建 DNS 與服務發現 負載均衡 外部負載均衡器 內建 Service 負載均衡 擴展性 手動添加實例 自動水平擴展（HPA） 故障恢復 人工介入 自我修復，自動重啟 更新部署 停機維護 滾動更新，零停機 資源利用 低效分配 智慧調度，資源優化 配置管理 散落各處 統一的 ConfigMap/Secret 🔄 為什麼需要 Kubernetes？ 容器化的演進 graph LR A[單體應用&amp;lt;br/&amp;gt;Monolithic] --&amp;gt; B[容器化應用&amp;lt;br/&amp;gt;Containerized] B --&amp;gt; C[容器編排&amp;lt;br/&amp;gt;Orchestrated] C --&amp;gt; D[雲原生&amp;lt;br/&amp;gt;Cloud Native] A1[難以擴展&amp;lt;br/&amp;gt;部署緩慢] --&amp;gt; A B1[可移植&amp;lt;br/&amp;gt;環境一致] --&amp;gt; B C1[自動化&amp;lt;br/&amp;gt;高可用] --&amp;gt; C D1[微服務&amp;lt;br/&amp;gt;彈性伸縮] --&amp;gt; D style A fill:#ff6b6b style B fill:#feca57 style C fill:#4ecdc4 style D fill:#a8e6cf Docker vs Kubernetes graph TB subgraph &amp;#34;Docker 生態&amp;#34; D1[Docker Engine] D2[容器運行] D3[映像管理] D4[Docker Compose&amp;lt;br/&amp;gt;單機編排] end subgraph &amp;#34;Kubernetes 生態&amp;#34; K1[容器編排] K2[叢集管理] K3[服務發現] K4[負載均衡] K5[自動擴展] K6[自我修復] K7[配置管理] K8[儲存編排] end D1 -.</description></item><item><title>Docker 完整指南（一）：基礎概念與入門教學</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/docker-complete-guide-part1-introduction-zh/</link><pubDate>Sat, 11 Oct 2025 10:30:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/docker-complete-guide-part1-introduction-zh/</guid><description>🎯 前言 Docker 是當今最流行的容器化技術，徹底改變了應用程式的開發、部署和運行方式。本系列文章將從基礎到進階，完整介紹 Docker 的各個面向。
本系列文章規劃：
第一篇（本文）：Docker 基礎概念與入門 第二篇：Docker 指令與實務操作 第三篇：Docker 進階應用與最佳實踐 📚 什麼是 Docker？ Docker 是一個開源的容器化平台，讓開發者可以將應用程式及其所有依賴項打包成一個標準化的單元（容器），然後在任何環境中一致地運行。
核心價值 graph TB A[Docker 核心價值] --&amp;gt; B[環境一致性] A --&amp;gt; C[快速部署] A --&amp;gt; D[資源效率] A --&amp;gt; E[易於擴展] B --&amp;gt; B1[開發環境 = 測試環境 = 生產環境] C --&amp;gt; C1[秒級啟動&amp;lt;br/&amp;gt;快速回滾] D --&amp;gt; D1[共享 OS 核心&amp;lt;br/&amp;gt;輕量級] E --&amp;gt; E1[水平擴展&amp;lt;br/&amp;gt;微服務架構] style A fill:#4ecdc4 style B fill:#a8e6cf style C fill:#ffd3b6 style D fill:#ffaaa5 style E fill:#ff8b94 Docker 解決的問題 傳統問題 Docker 解決方案 環境不一致 容器包含完整運行環境，確保一致性 依賴衝突 每個容器獨立運行，互不干擾 部署複雜 一鍵部署，快速回滾 資源浪費 共享 OS 核心，輕量級虛擬化 擴展困難 容器化應用易於水平擴展 配置管理 Infrastructure as Code，版本控制 🔄 虛擬化技術演進 傳統部署 vs 虛擬機 vs 容器 graph LR subgraph &amp;#34;傳統部署&amp;#34; A1[應用 A] A2[應用 B] A3[應用 C] OS1[作業系統] HW1[硬體] A1 --&amp;gt; OS1 A2 --&amp;gt; OS1 A3 --&amp;gt; OS1 OS1 --&amp;gt; HW1 end subgraph &amp;#34;虛擬機部署&amp;#34; B1[應用 A] B2[應用 B] B3[應用 C] G1[Guest OS] G2[Guest OS] G3[Guest OS] HV[Hypervisor] OS2[Host OS] HW2[硬體] B1 --&amp;gt; G1 B2 --&amp;gt; G2 B3 --&amp;gt; G3 G1 --&amp;gt; HV G2 --&amp;gt; HV G3 --&amp;gt; HV HV --&amp;gt; OS2 OS2 --&amp;gt; HW2 end subgraph &amp;#34;容器部署&amp;#34; C1[應用 A] C2[應用 B] C3[應用 C] DE[Docker Engine] OS3[Host OS] HW3[硬體] C1 --&amp;gt; DE C2 --&amp;gt; DE C3 --&amp;gt; DE DE --&amp;gt; OS3 OS3 --&amp;gt; HW3 end 詳細比較表 特性 傳統部署 虛擬機（VM） Docker 容器 啟動速度 分鐘級 分鐘級 秒級 資源佔用 高 高（需要完整 OS） 低（共享核心） 效能損耗 無 5-20% &amp;lt;5% 隔離性 低 高 中-高 可移植性 差 中 優秀 映像大小 N/A GB 級 MB 級 管理複雜度 低 高 中 密度 低 低（10-100/主機） 高（100-1000/主機） 作業系統 受限於主機 可以不同 共享主機核心 虛擬機 vs Docker 詳細對比 graph TB subgraph &amp;#34;虛擬機架構&amp;#34; VM1[應用程式 + 函式庫&amp;lt;br/&amp;gt;約 5-10 GB] VM2[Guest OS&amp;lt;br/&amp;gt;約 10-20 GB] VM3[Hypervisor&amp;lt;br/&amp;gt;約 1-2 GB] VM4[Host OS] VM5[實體硬體] VM1 --&amp;gt; VM2 VM2 --&amp;gt; VM3 VM3 --&amp;gt; VM4 VM4 --&amp;gt; VM5 end subgraph &amp;#34;Docker 架構&amp;#34; DC1[應用程式 + 函式庫&amp;lt;br/&amp;gt;約 100-500 MB] DC2[Docker Engine] DC3[Host OS] DC4[實體硬體] DC1 --&amp;gt; DC2 DC2 --&amp;gt; DC3 DC3 --&amp;gt; DC4 end style VM1 fill:#ff6b6b style VM2 fill:#ff8787 style DC1 fill:#4ecdc4 style DC2 fill:#45b7d1 關鍵差異說明：</description></item><item><title>購物車系統的高並發改造（二）：Redisson 分散式鎖、讀寫分離路由與 Docker HA 水平擴展</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/shopping-cart-high-concurrency-part2-zh/</link><pubDate>Mon, 25 May 2026 09:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/shopping-cart-high-concurrency-part2-zh/</guid><description>前言 第一篇解決了系統的吞吐量問題：Virtual Threads 讓執行緒不再阻塞在 I/O 上，HikariCP 調校讓資料庫連線不再是瓶頸，Redis 快取讓熱點讀取從記憶體直接回傳。
但吞吐量提升後，反而暴露出一個更深層的問題：
並發請求同時寫入同一份資料，怎麼保證正確性？
想像雙十一活動開始的那一秒，同一個用戶的兩個 Tab 同時按下「加入購物車」；或者同一個人網路不穩，重試了兩次「立即結帳」——這兩種場景都會導致重複訂單或資料不一致。
這篇介紹 PR #228 帶來的三個進階改造：
Redisson 分散式鎖：防止同一用戶的並發寫入互相干擾 讀寫分離路由：把讀請求分流到 Replica，Primary 只處理寫入 Docker HA 水平擴展：Nginx + 多個 App 實例 + MySQL 主從複製 方案四：Redisson 分散式鎖 為什麼需要分散式鎖？ 第一篇的 CartService.addToCart() 在高並發下有一個隱患：
1// Part 1 的版本（沒有鎖） 2public void addToCart(AddToCartDto addToCartDto, Product product, User user) { 3 Cart cart = new Cart(product, addToCartDto.getQuantity(), user); 4 cartRepository.save(cart); // ← 多個執行緒可能同時執行這一行 5} 當同一個用戶同時發出兩個「加入購物車」請求時：
Thread A: new Cart(productX, qty=1, user) → save → 購物車有 1 個 productX Thread B: new Cart(productX, qty=1, user) → save → 購物車有 2 個 productX（重複！） cartRepository.</description></item><item><title>Docker 完整指南（二）：指令大全與實務操作</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/docker-complete-guide-part2-commands-zh/</link><pubDate>Sat, 11 Oct 2025 11:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/docker-complete-guide-part2-commands-zh/</guid><description>🎯 前言 在上一篇文章中，我們了解了 Docker 的基礎概念與架構。本文將深入探討 Docker 指令的實務應用，從基礎操作到進階技巧，幫助你全面掌握 Docker CLI 的使用。
本文重點：
Docker 指令體系與結構 容器生命週期管理 映像操作與管理 網路與儲存配置 實用技巧與最佳實踐 📋 Docker 指令體系 Docker CLI 結構 graph TB CLI[Docker CLI] --&amp;gt; MGMT[管理指令&amp;lt;br/&amp;gt;Management Commands] CLI --&amp;gt; LEGACY[傳統指令&amp;lt;br/&amp;gt;Legacy Commands] MGMT --&amp;gt; CONTAINER[docker container] MGMT --&amp;gt; IMAGE[docker image] MGMT --&amp;gt; NETWORK[docker network] MGMT --&amp;gt; VOLUME[docker volume] MGMT --&amp;gt; SYSTEM[docker system] LEGACY --&amp;gt; RUN[docker run] LEGACY --&amp;gt; PS[docker ps] LEGACY --&amp;gt; BUILD[docker build] LEGACY --&amp;gt; PULL[docker pull] style MGMT fill:#4ecdc4 style LEGACY fill:#feca57 指令格式對照 傳統指令 新版管理指令 說明 docker ps docker container ls 列出容器 docker images docker image ls 列出映像 docker rm docker container rm 刪除容器 docker rmi docker image rm 刪除映像 docker inspect docker container inspect 查看容器詳情 建議： 新專案使用管理指令格式，更清晰且易於理解。</description></item><item><title>Advanced MCP Server Development with Database Integration - Part 2</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/building-advanced-mcp-servers-claude-code-part2/</link><pubDate>Sat, 27 Sep 2025 10:00:00 +0000</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/building-advanced-mcp-servers-claude-code-part2/</guid><description>Advanced MCP server development covering database integration, REST API connectors, real-time data processing, and production deployment strategies for Claude Code development workflows.</description></item><item><title>Crypto Quantitative Trading Part 3: Optimization, Validation, and Production Deployment</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/crypto-quantitative-trading-part3-production-deployment/</link><pubDate>Sat, 24 Jan 2026 22:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/crypto-quantitative-trading-part3-production-deployment/</guid><description>Deploy cryptocurrency trading strategies to production. Master walk-forward analysis, parameter optimization, live trading integration, real-time monitoring, and machine learning enhancements. Complete production-ready system with AWS deployment and comprehensive risk controls.</description></item><item><title>Docker 完整指南（三）：進階應用與生產實踐</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/docker-complete-guide-part3-advanced-zh/</link><pubDate>Sat, 11 Oct 2025 11:30:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/docker-complete-guide-part3-advanced-zh/</guid><description>🎯 前言 經過前兩篇文章的學習，我們已經掌握了 Docker 的基礎概念與指令操作。本文將深入探討 Docker 的進階應用，涵蓋從開發到生產環境的完整實踐。
本文重點：
Dockerfile 最佳實踐與優化 多階段建立（Multi-stage Build） Docker Compose 完整應用 網路進階配置 安全性強化 效能調優 生產環境部署策略 📝 Dockerfile 深度解析 Dockerfile 指令完整對照表 指令 作用 層級影響 範例 FROM 指定基礎映像 是 FROM node:18-alpine LABEL 添加元資料 否 LABEL version=&amp;quot;1.0&amp;quot; RUN 執行指令 是 RUN npm install CMD 容器啟動指令 否 CMD [&amp;quot;npm&amp;quot;, &amp;quot;start&amp;quot;] ENTRYPOINT 容器進入點 否 ENTRYPOINT [&amp;quot;python&amp;quot;] COPY 複製檔案 是 COPY app.py /app/ ADD 複製並解壓 是 ADD archive.tar.gz /app/ ENV 設定環境變數 否 ENV NODE_ENV=production ARG 建立時變數 否 ARG VERSION=1.</description></item><item><title>Auto Agent System - Part 4 - 生產化之路:Langfuse 可觀測性、Docker 瘦身與 AWS 部署</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/auto-agent-system-part4-production-zh/</link><pubDate>Sat, 04 Jul 2026 12:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/auto-agent-system-part4-production-zh/</guid><description>「在我電腦上跑得起來」和「能給一群人用」之間,隔著四道牆: 你看得到它在做什麼嗎(可觀測性)?它打包起來多大、部署多快(image)? 它能自動擴縮、掛了會自己重啟嗎(部署)?誰能用、能用什麼由誰決定(權限)? 這一篇,就是 agent_auto_system 翻過這四道牆的過程。
前三篇我們把系統的「能力」講完了:架構(Part 1)、可靠性引擎(Part 2)、實戰任務(Part 3)。這一篇談的是另一個維度——生產化(productionization):讓這套系統能被真實地、多人地、可維運地跑起來。四個主題,對應四個 merged PR。
一、Langfuse 可觀測性:在唯一的漏斗上掛 trace 對應 PR #19:feat(harness): add Langfuse LLM-observability integration
Part 2 我們反覆強調:LLM 的「錯」不是當機,而是品質退化——HTTP 200,但答案是編的。你需要一種能看見「品質」的監控,這就是 LLM 可觀測性,而 Langfuse 是這個領域的代表工具。
這個 PR 最漂亮的地方,是它的 PR 描述本身就是一堂架構課:
「CrewAI 1.x 直接呼叫各家原生 provider SDK(不走 litellm),所以要把 Langfuse 掛在 executor——這個已經知道 model、tokens、cost、eval score、status 的唯一漏斗。」
拆解這句話為什麼重要:
很多人以為的 Langfuse 接法: 在「LLM 呼叫的那一行」自動攔截(靠 litellm 之類的中介層) 但 CrewAI 1.x 直接打原生 SDK,沒有那個中介層可攔 │ ▼ 聰明的做法:不在「呼叫點」攔,而在「執行點」記 │ ▼ executor 是所有任務的必經之路,而且它手上早就有: model + tokens + cost + eval score + status → 在這裡發一條 trace,一次到位、還帶品質分數 ┌─────────────────────────────────────────────────┐ │ executor.</description></item><item><title>Spring Boot 多環境配置完整指南：開發、測試、生產環境管理</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/spring-boot-multi-environment-configuration-guide-zh/</link><pubDate>Wed, 15 Oct 2025 10:00:00 +0000</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/spring-boot-multi-environment-configuration-guide-zh/</guid><description>深入探討 Spring Boot 多環境配置管理，包括資料庫切換、Redis 配置、以及 Docker 容器化部署的完整實作指南。</description></item><item><title>Docker Mount Complete Guide: Volumes, Bind Mounts, and tmpfs Comparison</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/docker-mount-complete-guide-comparison/</link><pubDate>Sat, 11 Oct 2025 10:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/docker-mount-complete-guide-comparison/</guid><description>Introduction When working with Docker containers, understanding how to properly manage data persistence is crucial. Docker provides three main approaches for mounting data into containers: Volumes, Bind Mounts, and tmpfs mounts. Each has distinct characteristics, use cases, and trade-offs.
This comprehensive guide explores all Docker mount types, their differences, practical examples, and best practices to help you choose the right approach for your specific needs.
What is Mounting in Docker? Mounting in Docker refers to the process of making host filesystem directories or Docker-managed storage available inside containers.</description></item><item><title>Building Employee Management System with Spring Boot and Vue.js</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/spring-boot-vue-employee-management-system/</link><pubDate>Sat, 27 Sep 2025 10:00:00 +0000</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/spring-boot-vue-employee-management-system/</guid><description>Comprehensive guide to building a modern employee management system using Spring Boot microservices architecture and Vue.js frontend, designed for enterprise scalability and extensibility.</description></item></channel></rss>