此外,Compose 也支援 env_file 指令,允許容器從外部檔案載入環境變數。這種做法遵循「12-Factor App」的準則——將設定透過環境變數注入,使映像能隨時在不同環境(開發、測試、生產)下運行,而無需重新建構映像。
當你的應用程式已經用 Compose 編排好,且在單一主機上運作順暢,下一步便是思考「如果流量成長,一台主機不夠用該怎麼辦?」這就是 Kubernetes 登場的時機。K8s 是一套開源容器叢集管理平台,它能自動化容器的部署、擴展、負載平衡、自我修復與服務發現。
Docker Compose 雖然方便,但僅適用於單一 Docker 主機。若我們想橫向擴展 API 服務至三個副本,並確保某個副本當機時自動重啟,Compose 能做的有限。Kubernetes 則提供一個叢集(Cluster)架構,其中控制平面(Control Plane)與工作節點(Worker Nodes)協同工作。K8s 會持續監視整個叢集狀態,自動將容器調度到最剩餘資源的節點,並透過 Service(服務)對象提供穩定的存取入口。
此外,K8s 原生支援水平自動伸縮(HPA),依據 CPU 使用率或自訂指標動態增減 Pod 數目。這些功能是維運任何中大型商業網站必備的基礎。
用一句話總結:Deployment 定義「容器該以多少個副本奔跑」,Service 定義「如何連接到這些 Pod」。
你可能不想手動撰寫大量的 YAML 將 Docker Compose 轉成 K8s 資源,此時 Kompose 工具可自動完成轉換。例如 kompose convert -f docker-compose.yml 會產生 deployment.yaml、service.yaml 等檔案。這雖然不是完美,但它提供了一個快速起點。
另一種更現代的方法是使用 Skaffold(由 Google 維護),它可自動建構映像、推送倉庫、部署到 K8s,並持續監控變更提供熱重載。開發者在本地端執行 skaffold dev 即可將程式碼變更立即同步到 Kubernetes 叢集(如 minikube、Docker Desktop 內建的 K8s)。2026 年,Skaffold 仍然是本地開發與 K8s 整合最有效率的方式之一。
接下來,我們將示範一個完整的實作流程:從一個 Node.js 應用程式開始,建立 Docker 映像,上傳到 Docker Hub 私人倉庫,再以 Kubernetes 資源部署到叢集。
假設您的專案根目錄有 server.js 及相關檔案。我們先建立 Dockerfile:
docker build -t [your-username]/notes-api:1.0.0 .
docker login
docker push [your-username]/notes-api:1.0.0
在真實企業中,私有倉庫通常會建在公司內部的 Harbor 或 AWS ECR,做完整的訪問控制與簽署驗證。
6.2 撰寫 Kubernetes YAML 與部署流程
現在在 Kubernetes 叢集(例如 Minikube 或 Docker Desktop 自帶的 K8s 叢集)中建立一個 namespace 來區隔環境:
kubectl create namespace notes-app
接著建立 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: notes-api
namespace: notes-app
spec:
replicas: 3
selector:
matchLabels:
app: notes-api
template:
metadata:
labels:
app: notes-api
spec:
containers:
- name: notes-api
image: [your-username]/notes-api:1.0.0
ports:
- containerPort: 3000
env:
- name: DATABASE_URL
value: "mongodb://mongo-svc:27017/notes"
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "250m"
memory: "256Mi"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
同時建立 service.yaml 以對外提供存取:
apiVersion: v1
kind: Service
metadata:
name: notes-api-svc
namespace: notes-app
spec:
type: LoadBalancer
selector:
app: notes-api
ports:
- protocol: TCP
port: 80
targetPort: 3000
執行 kubectl apply -f deployment.yaml -f service.yaml 後,可以用 kubectl get pods -n notes-app 觀察 Pod 啟動狀態,並用 kubectl get svc -n notes-app 取得 LoadBalancer 的外部 IP 或 埠。若在本機環境(例如 minikube tunnel),訪問該 IP 即可使用服務。
6.3 使用 Helm 進行套件管理與版本控制
2026 年,直接使用 kubectl apply 是可行的,但對於大型系統而言,Helm 已成為標準的 K8s 套件管理器。Helm 將應用打包成「Chart」,其中包含所有 YAML 模板與可設定的值。你可以把 Chart 想像成 Docker 映像,把 Helm Release 想像成容器。
建立一個 Helm Chart 很簡單:helm create my-notes
產生的目錄結構中,values.yaml 定義了預設參數(如 replicas、image.tag、service.type)。透過 helm upgrade --install my-notes ./my-notes --set image.tag=1.0.1,你可以無縫地升級應用程式並滾動更新 Pod,不必手動修改 YAML。Helm 也支援 rollback——helm rollback my-notes 1——讓失誤部署可以立即回復到前一版。
七、最佳實務與常見陷阱——從地雷區安全通過
在 Docker 到 K8s 的旅程中,有許多容易踩雷的細節。以下是 2026 年最常發生的錯誤與對策。
7.1 資源限制與監控:避免失控的容器
一個最駭人的狀況:寫入一個記憶體速爆炸的程式碼,無限生成陣列,最終讓整個節點記憶體耗盡,導致 K8s 節點失聰。為了避免這種情況,務必在 K8s Deployment 中設定 resources.limits。小型專案可以從「requests」與「limits」都設為相同開始,保證服務品質。而在 Docker 本機端,也可以透過 docker run --memory="512m" --cpus="1.0" 限制容器資源。
另外,2026 年主流監控工具包含 Prometheus + Grafana。Kubernetes 生態的 metrics-server 能收集 Pod 的 CPU 與記憶體資料,而 Prometheus 可抓取 Node exporter 及應用程式的自訂指標,通過 Grafana 建立即時儀表板。設定告警機制(例如當 CPU 使用率超過 80% 維持 5 分鐘)是維運標準動作。
7.2 網路安全性與祕密管理:零信任模型下的容器
多數容器攻擊源自於不必要的開放服務與洩漏的祕密。首先,網路策略(NetworkPolicy)在 K8s 中允許我們定義 Pod 間流量規則。預設所有 Pod 可以互相通訊,但最好的配置是「白名單模式」。透過 NetworkPolicy,僅允許從 API Pod 走向 MongoDB Pod 的連接,其餘一律阻斷。
關於敏感資訊,切勿將資料庫密碼寫在 YAML 明文內。2026 年 K8s 提供 Secrets 物件,但 Secrets 其實只是 Base64 編碼,並非真正的加密。因此實務上建議搭配外部密鑰管理系統,如 HashiCorp Vault、AWS Secrets Manager,或採用 K8s 1.30+ 之後正式支援的 KMS 加密機制,將 secrets 加密後存放於 etcd。
同時,容器映像本身也應避免嵌入祕密。請想辦法在啟動時從環境變數或掛載的密鑰檔案中讀取。若使用的是 Docker Compose,則可利用 Docker 的 secrets 功能(掛載過濾器)將金鑰安全送到容器中。
最後,2026 年 ChatGPT 與 DevSecOps 的興起,讓工程師開始習慣使用工具自動修補漏洞。但真正的安全防護仍需要理解「防禦縱深」:限制資源、最小權限、網路區隔、祕密加密、映像掃描、以及持續稽核,每一個環節都不能少。
結語:掌握 Docker 與 K8s,開啟職涯新境界
在本文中,我們從最基礎的 Docker 安裝、影像建置,一路深入到 Dockerfile 最佳實務、Compose 多容器編排,更進一步探索了 Kubernetes 的整合部署、Helm 套件管理以及安全性議題。這趟旅程已經覆蓋了 2026 年容器生態系中最核心的知識與實戰技能。
從入門到 K8s 整合,就像是從騎腳踏車到開進賽車場。Docker 給你了腳踏車的架構思維,讓我們能迅速移動;Kubernetes 則是那台頂級賽車,具備引擎、齒輪與道路管理系統,讓你在高速變動的企業環境中輕鬆應對百萬流量。你現在已經了解兩者如何無縫整合——先以 Docker 建立映像,再轉成 Kubernetes Deployment,並以 Service 對外曝光。這就是現代化應用的部署 DNA。
雅寶社區的讀者們,請立刻開啟你的終端機,實際動手操作一遍。不要只看不練,所有的 Docker 魔術與 K8s 魅力,都需要親手捲起袖子實驗才能化為你的核心肌肉記憶。如果你在過程中遇到任何問題,歡迎到「雅寶社區 · 頂客論壇」的 3C 科技教學版塊發問與討論——我們會持續提供 2026 年最新、最有價值的容器化技術分享。祝各位容器化旅程一帆風順,佈署零事故!
💬 留言討論
歡迎在下方留言,分享您的想法、心得或疑問。所有留言都會透過 GitHub 帳號 進行驗證。