code {
b
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin"]
interval: 10s
timeout: 5s
retries: 3
networks:
redis:
image: redis:7-alpine
command: ["redis-server", "--appendonly", "yes"]
volumes:
networks:
volumes:
pgdata:
redis-data:
networks:
app-network:
driver: bridge
3.2 啟動與管理多容器應用
當環境變數檔(.env)定義好之後,執行以下指令即可一次啟動所有服務並檢視狀態:
建置並在背景啟動
docker compose up -d --build
查看所有容器狀態
docker compose ps
集中查看三個容器的日誌
docker compose logs -f --tail=50
停止並移除所有相關容器與網路,但保留資料卷
docker compose down
在 2026 年,Compose 不僅限於本機,更是 Docker Desktop 與雲端 IDE 的內建功能。當你需要讓團隊成員快速複製開發環境時,只需提供這個 docker-compose.yml 檔案,即可達成「一鍵建置」的目標。
四、 由零到一:整合 Kubernetes(K8s)編排與部署
當你的容器數量突破數十甚至上百個,並需要考慮自動擴縮容、Service Discovery、無縫滾動更新時,管理變得太過複雜,此時就必須導入 Kubernetes(K8s)。2026 年的 K8s 已經將 API 穩定性提升到極致,很多生態系功能(如 Ingress Controller、HPA)皆已成為內建或穩定版。
4.1 關鍵編排概念:Pod、Service、Deployment 與 Ingress
物件
說明
2026 年實務情境
Pod
最小調度單位,可包含一個或多個緊密耦合容器
通常在同一個 Pod 中僅放置 Sidecar Proxy 或日誌收集 Agent
Deployment
管理無狀態應用的副本數與滾動更新策略
前端/後端 API 最常使用的控制器
Service
提供穩定的 ClusterIP 與 DNS 名稱讓應用互相連線
建立後端 API 於集群內被其他元件呼叫
Ingress
將外部的 HTTP/HTTPS 流量路由至集群內的 Service
透過域名與路徑轉發流量至前端或後端
4.2 將 Docker Compose 轉換為 K8s 清單
雖然 Compose 檔案不能直接被 K8s 使用,但可用 kompose 工具將 Compose 檔案轉換為 YAML 清單。以下是轉換與部署的快速指南:
安裝 kompose(於本機)
在包含 docker-compose.yml 的目錄下執行
kompose convert
這會自動產生 deployment.yaml、service.yaml 等檔案
kubectl apply -f .
查看資源狀態
kubectl get pods
kubectl get services
雖然 Kompose 可以加速轉換,但由於 K8s 對資料庫等有狀態應用的排程涉及 StatefulSet、PersistentVolumeClaim(PVC),建議在正式環境中手動編寫更精確的清單。
4.3 建立高效的 Deployment 與 HPA(水平自動擴縮容)
2026 年部署的標準定義,包含資源請求和定義、存活探測(Liveness Probe)以及就緒探測(Readiness Probe)。彈性伸縮能力是 K8s 的核心優勢之一,透過 CPU 或自定義指標來動態增加 Pod 數量:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bookstore-api
labels:
app: bookstore
spec:
replicas: 3
selector:
matchLabels:
app: bookstore
template:
metadata:
labels:
app: bookstore
spec:
containers:
image: harbor.example.com/bookstore-api:v1.2.0
ports:
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: bookstore-api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: bookstore-api
minReplicas: 2
maxReplicas: 10
metrics:
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
這個 YAML 片段說明了 2026 年的最佳實踐:資源限制與健康檢查已經是不可或缺的標準配備。HPA 會監控 Pod 的 CPU 使用率,當超過 70% 時自動增加 Pod 數量,確保服務平穩應對尖峰人流。
五、 2026 年 Docker 與 K8s 整合的進階策略
當你已經熟悉基礎的 K8s 操作之後,接下來的挑戰就在於如何優雅的整合 Docker 生態與 K8s 原生元件。謹記:Docker 負責建立與封裝映像檔,而 K8s 負責運行與調度。
5.1 私有映像檔倉庫與 Pull Secrets
在企業內部署,你不會將商業機密推送到 Docker Hub。使用 Harbour 或是自建 Registry 是常見的方案。K8s 要拉取私有映像檔,必須透過 docker-registry 類型的 Secret:
kubectl create secret docker-registry regcred \
docker-server=my-registry.example.com \
docker-username=admin \
docker-password=supersecret \
之後在 Deployment 中指定 imagePullSecrets 即可安全地取得映像檔,而不需將帳密寫在映像檔名稱中。
5.2 從 Docker Volume 到 PersistentVolume 的資料遷移
我們在 Compose 階段使用的資料卷(Volume)在 K8s 中對應為 PersistentVolumeClaim(PVC)。管理資料庫時,必須確保儲存類別(StorageClass)具備異地備援的功能。以下為 2026 年推薦的做法:
使用 CSI(Container Storage Interface)驅動連接雲端磁碟(如 AWS EBS、GCE PD)。
對於關鍵資料庫,務必使用 StatefulSet 而非 Deployment,以確保穩定的 Pod 網路識別符(如 db-0、db-1)。
善用 Velero 等工具定期備份 PVC 內的重要資料。
5.3 GitOps 流程:以 Docker 為始,以 K8s 為終
2026 年的主流部署方式是 GitOps。開發者將 Dockerfile 的變更推送到 Git 儲存庫,CI 工具(如 GitHub Actions、GitLab CI)自動建構並推送映像檔至容器倉庫,隨後更新 K8s 清單。接著 Argo CD 監控 Git 中的期望狀態,並自動同步至 Kubernetes。
此流程具備高度的可追溯性與自動化安全性,任何變更皆有版本記錄,若部署失敗可一鍵 Rollback。
六、 從入門到實戰的常見雷區與技巧
即便擁有完整的指南,許多人仍會在實作過程中踩到意料之外的雷區。以下為 2026 年論壇上最常被討論的痛點與對應解法:
6.1 容器格式化與時間同步問題
在 K8s 中,日誌會統一收集至 EFK/PLG 或 Loki 系統。若你的容器日誌輸出到不同位置(如 /var/log/app.log),會增加收集難度。2026 年方式為讓應用程式直接將日誌寫入標準輸出(STDOUT/STDERR),再由節點上的 Agent 統一讀取。
6.2 優雅結束(Graceful Shutdown)
當 K8s 縮容或更新時,它會發送 SIGTERM 訊號給容器。若應用程式只監聽 SIGINT 而忽略 SIGTERM,則會造成部分請求中斷。務必在應用程式中撰寫優雅收尾的程式碼,並設定 terminationGracePeriodSeconds 為適當值。
6.3 避免在容器內使用 SSH
容器強調不可變基礎架構,若你為了除錯而使用 SSH 登入容器,便破壞了這項原則。在 2026 年,除錯策略應以 kubectl exec -it pod -- /bin/sh 臨時執行工具,並且所有的設定皆應透過環境變數或設定檔注入,保持映像檔的「可重建性」。
七、 總結:開啟你的 2026 雲原生航路
回顧今年度關於 Docker 容器化部署的學習地圖,我們依序領略了 Dockerfile 的最佳化、多容器編排(Compose),並正式進入 Kubernetes 的整合領域。我們了解到,Docker 是構築容器映像的利器,而 K8s 是撐起整個星系的管理核心。在 2026 年,這兩者的界線非但不模糊,反而因為協作而更顯清晰。
對於剛踏入容器世界的新手,建議先熟練 Docker CLI,反覆操作資料卷與網路;對於有經驗的系統管理員,則應投入 K8s 的服務網格(Service Mesh)與可觀測性領域。這是一條廣闊且充滿樂趣的技術道路,期望「雅寶社區 · 頂客論壇」的此份實戰指南,能成為你航向雲原生海域的標竿。
本文作者:雅寶資深架構師・K8s 好好玩
發佈平台:雅寶社區 · 頂客論壇(3C 科技教學)
版權聲明:歡迎分享,但請務必註明出處,共同維護良好的技術分享風氣。
💬 留言討論
歡迎在下方留言,分享您的想法、心得或疑問。所有留言都會透過 GitHub 帳號 進行驗證。
🏠 返回首頁