緯育 2026-0516

出自頂極製作所
於 2026年5月18日 (一) 12:07 由 Kuyohong留言 | 貢獻 所做的修訂 (建立內容為「本次系列講座首先介紹了 Docker 中兩種備份與遷移機制:docker save/docker load(用於映像檔)與 docker export/docker import(用於容…」的新頁面)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

本次系列講座首先介紹了 Docker 中兩種備份與遷移機制:docker save/docker load(用於映像檔)與 docker export/docker import(用於容器)。講師強調了兩者在處理對象、檔案大小及匯入命名上的差異。接著比較了 docker commit 與 docker export/import 兩種建立映像檔的方式,指出 commit 會增加不必要的映像檔層數,建議優先使用 export。課程實作部分,指導學員使用 scp 將檔案傳輸至 Linux 虛擬機,並編寫 Dockerfile 建立一個包含 Tomcat 的 Web Server 映像檔,涵蓋 FROM、RUN、ADD、EXPOSE、ENTRYPOINT 等指令。

隨後,講座深入探討了 Dockerfile 中 ENTRYPOINT 與 CMD 的核心差異,建議初學者使用 ENTRYPOINT 以確保容器穩定啟動。課程進而延伸至 Kubernetes (K8s) 的學習,將其比喻為多引擎飛機,強調其叢集備援與高可用性的優勢。講師介紹了學習 K8s 的重要資源網站(kubernetes.io, cncf.io)及相關專業認證(CKA, CKAD, CKS),並闡述了容器化技術相較於傳統虛擬機部署的核心優勢,如免安裝、避免人為錯誤、跨平台及實現應用與底層作業系統的解耦,這正是雲原生(Cloud Native)的核心精神。

講座接著深入探討了雲原生領域的知識,包括 IT 認證的類型(選擇題 vs. 實務操作型)、CNCF 基金會的宗旨與專案成熟度分級。最後,詳細闡述了 Kubernetes 的起源、架構(Master 與 Worker 節點及其組件如 API Server、Scheduler、etcd、Kubelet、Kube-proxy)以及其核心功能,如資源調度、自我修復、服務發現和自動擴展/縮減。講師特別強調了「聲明式配置」作為 K8s 的重要核心觀念,以及內建 DNS(CoreDNS)在服務發現機制中的關鍵作用,並解釋了 Control Manager 如何監控並維持系統的預期狀態,實現自動化管理與故障恢復。

Docker 映像檔與容器的備份、遷移與客製化

  • 映像檔的備份與還原 (docker save / docker load)
    • 用途: docker save 將一個或多個映像檔 (Image) 儲存成 .tar 檔案;docker load 則從檔案中載入映像檔。
    • 特性: 載入後的映像檔名稱與原始名稱完全相同。
    • 應用情境: 適用於無網路或無倉庫 (Registry) 環境下的備份、還原及主機間遷移。
  • 容器的匯出與匯入 (docker export / docker import)
    • 用途: docker export 匯出一個容器 (Container) 的檔案系統成為 .tar 檔案;docker import 則將該檔案匯入並建立成一個新的「映像檔」。
    • 特性:
      • 處理對象是容器而非映像檔。
      • 匯入時可以為新映像檔指定全新名稱。
      • 可用於建立客製化映像檔:啟動基礎容器 -> 修改 -> 匯出 -> 匯入成新映像檔。
  • docker commit vs docker export/import
    • 目的: 兩者皆可基於容器變更建立新映像檔。
    • 主要差異: commit 會在原有映像檔上疊加新層 (Layer),增加層數,可能影響載入速度;而 export/import 產生的映像檔只有一個基礎層。
    • 最佳實踐:
      • 建議使用 export/import 來基於容器變動建立映像檔。
      • 建議使用 save/load 來交換或備份完整的映像檔。
  • Dockerfile 指令 (ENTRYPOINT vs. CMD)
    • ENTRYPOINT: 定義的指令在容器啟動時一定會被執行,不會被 docker run 後附加的指令覆蓋。
    • CMD: 定義的指令會被 docker run 後附加的指令覆蓋。
    • 建議: 初學者建議優先使用 ENTRYPOINT,以避免因意外附加指令導致容器啟動失敗。

Docker 映像檔的建立與執行 (Web Server 實例)

  • Dockerfile 常用指令
    • FROM rockylinux:9: 指定基礎映像檔。
    • WORKDIR /root: 設定容器內的工作目錄。
    • RUN ...: 在建構過程中執行指令,如安裝套件。
    • ADD jdk-8u191-linux-x64.tar.gz /: 將主機檔案加入映像檔並自動解壓縮。
    • EXPOSE 8080: 宣告容器將開放的連接埠。
    • ENV JAVA_HOME ...: 設定環境變數。
    • ENTRYPOINT [...]: 設定容器啟動時執行的命令。
  • 建置與執行流程
 1. 準備檔案: 使用 scp 將 Dockerfile 及所需檔案(如 JDK)傳輸至伺服器。
 2. 建置映像檔: docker build -t webserver .
 3. 執行容器: docker run --name my-web-server -p 8080:8080 webserver
 4. 驗證: 透過瀏覽器訪問主機 IP 的 8080 連接埠。

Docker 容器化技術的優勢與雲原生精神

  • Image 的核心價值
    • 簡化部署: 將應用程式與其所有依賴(套件、函式庫、設定)打包在一起,如同「綠色軟體」,免安裝即可執行。
    • 避免人為錯誤: 標準化的 Image 確保了環境的一致性。
    • 跨平台與可移植性: 「一次打包,到處部署」,不受底層作業系統發行版差異的影響。
  • 解耦(Decoupling)與雲原生(Cloud Native)
    • 核心目標是實現應用程式與作業系統的解耦,讓應用程式擺脫對特定環境的強依賴性,提升靈活性與可移植性。
  • 持久卷掛載(Persistent Volume)
    • 將主機節點的資料夾掛載到容器內部,實現資料持久化。即使容器被刪除,資料依然保留在主機上。

Kubernetes (K8s) 基礎概念

  • 從單機到叢集管理
    • Docker 是單機管理工具,存在單點故障風險。
    • K8s 是叢集管理工具,跨多台主機管理容器,提供備援 (HA, High Availability)。講師以多引擎飛機比喻其叢集備援特性。
  • 操作模型:指令型 vs. 聲明型
    • 指令型 (Imperative): 告訴系統「如何做」(How)。
    • 聲明型 (Declarative): 宣告想要的「最終狀態」(What),系統會自動完成部署。這是 K8s 的核心理念,也是未來趨勢。
  • 起源與命名: 源自 Google 內部專案 Borg,K8s 是其簡稱。100% 由 Go 語言撰寫。
  • 學習資源與認證
    • 官方網站: kubernetes.io (官方文件) 和 cncf.io (雲原生運算基金會)。
    • 專業認證: CKA (Administrator), CKAD (Developer), CKS (Security Specialist) 是含金量較高的實務操作型認證。

Kubernetes (K8s) 架構與核心組件

  • Master Node (管理節點): 負責整個叢集的管理。
    • API Server: 所有操作的統一入口,預設透過安全的 6443 連接埠進行認證與授權 (RBAC) 存取。
    • etcd: 儲存叢集所有狀態與設定的分佈式鍵值資料庫,極為重要。
    • Scheduler: 負責將 Pod 調度到最合適的 Worker Node 上。
    • Control Manager: 自動化管理中心,監控並維持系統的預期狀態,執行自我修復。
  • Worker Node (工作節點): 負責運行應用程式。
    • Kubelet: 負責管理 Pod 的完整生命週期,並向 Master 回報節點狀態。
    • Kube-proxy: 負責節點內的網路通訊與負載平衡,底層基於 IPtables 或 IPVS 實現。
    • Container Runtime: 容器執行環境,如 ContainerD。

Kubernetes (K8s) 核心功能

  • 服務發現 (Service Discovery)
    • 內建 DNS 服務(新版為 CoreDNS),當建立 Service 時,會自動為其創建 DNS 紀錄。
    • FQDN 格式為 服務名稱.命名空間名稱.svc.cluster.local,其中 服務名稱.命名空間名稱 必須記住。
    • Pod 內的 DNS 設定會被 K8s 自動覆寫,指向內部 DNS。
  • 主要功能特性
    • 資源調度 (Scheduling): 自動選擇節點部署應用。
    • 自我修復 (Self-healing): 當應用異常時,自動恢復到正常狀態。
    • 擴展與縮減 (Scaling): 可手動或自動(Auto-scaling)增減應用實例數量以應對負載變化。

Linux 相關知識

  • 套件管理工具: apk (Alpine), apt (Ubuntu), yum (Red Hat/Rocky), zypper (openSUSE)。
  • 檔案傳輸: 使用 scp 指令在本地與遠端主機間安全地複製檔案,是必備技能。語法:scp [本地檔案] [使用者]@[遠端主機]:[遠端路徑]。

2026-0516-01.png