雅寶社區 · 頂客論壇 (AHPAL.COM)

2026 年 Docker 容器化部署實戰:從入門到 K8s 整合指南

modern%20workspace%20with%20laptop%2C%20smartphone...
發表時間:2026 年 08 月 16 日 | 更新日期:2026 年 08 月 16 日 | 編輯:雅寶社區編輯團隊

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 \

[email protected]

之後在 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 帳號 進行驗證。

    🏠 返回首頁