容器化與微服務 (Containerization & Microservices)

avatar-img
發佈於軟體開發
更新 發佈閱讀 7 分鐘

你可以把這個主題想像成:不再是蓋一棟巨大的獨棟別墅(傳統單體應用),而是建造許多獨立的小公寓(微服務),每間公寓都被打包在一個標準化的移動箱子裡(容器),然後這些箱子可以在任何地方快速地部署和管理。

1. Docker 🐳

  • 什麼是 Docker? Docker 是一個開源平台,它能讓你輕鬆地開發、交付和運行應用程式。它的核心概念是「容器 (Container)」。
  • 容器 (Container) 是什麼?
    • 比喻: 想像一個標準化的、輕便的「打包箱」。這個箱子裡不只裝了你的應用程式本身,還包含了應用程式運行所需的所有東西:程式碼、執行環境、函式庫、系統工具、設定檔,甚至是一個輕量級的作業系統環境。
    • 優勢:
      • 環境一致性 (Consistency): 應用程式在任何地方運行,無論是你的筆電、測試伺服器還是生產環境,都因為被打包在同一個容器裡,而擁有完全相同的運行環境。這解決了「在我機器上可以跑,為什麼在你的機器上不行?」的問題。
      • 輕量級與隔離: 容器比虛擬機器 (VM) 更輕量、啟動更快。它與宿主機 (Host Machine,運行 Docker 的實體機或虛擬機) 和其他容器之間相互隔離,互不影響。
      • 可移植性 (Portability): 一旦打包成 Docker 容器,就可以在任何支持 Docker 的環境中運行,無需重新配置。
  • Docker 的主要元件:
    • Docker Image (映像檔) 📸: 這是容器的「藍圖」或「模板」。它是一個不可變的、只讀的打包檔,包含了運行容器所需的所有指令。當你執行一個 Docker Image,就會創建一個 Docker Container。
    • Docker Container (容器) 📦: 這是 Docker Image 的「運行實例」。它是一個可運行、隔離的環境,應用程式就在裡面執行。
    • Docker Daemon (守護程式) 👻: 運行在宿主機上的背景服務,負責管理 Docker Image、Container、網路、儲存等。
    • Dockerfile (腳本) 📜: 一個文字檔,包含了如何從頭建置一個 Docker Image 的指令集。

2. Kubernetes (K8s) ☸️

  • 什麼是 Kubernetes (K8s)? K8s 是一個開源系統,專門用於自動化部署、擴展和管理容器化應用程式。當你運行大量容器,需要協調它們、確保它們正常運行、並且能在負載變化時自動擴展時,Docker 本身就不夠了,你需要 K8s 這樣的「管家」。
  • 為什麼需要 K8s?
    • 當你的應用程式由十幾個甚至上百個 Docker 容器組成時,手動管理會變得非常困難。
    • 你需要確保容器故障時能自動重啟。
    • 你需要將網路流量均勻分配給多個容器。
    • 你需要根據流量自動增加或減少容器數量。
    • 你需要更新應用程式時能平滑過渡,不影響服務。
    • K8s 就是為了解決這些容器編排 (Container Orchestration) 的複雜性而誕生的。
  • K8s 的主要功能:
    • 自動化部署與滾動更新 (Automated Rollouts & Rollbacks): 可以逐步部署新版本的應用程式,並在出現問題時自動回滾到舊版本。
    • 服務發現與負載平衡 (Service Discovery & Load Balancing): 容器可以自動找到彼此,K8s 會在它們之間自動分配流量。
    • 儲存編排 (Storage Orchestration): 自動掛載你選擇的儲存系統(如雲端儲存、網路儲存)到容器中。
    • 自我修復 (Self-Healing): 如果容器崩潰、節點失效,K8s 可以自動重啟、替換或重新排程容器。
    • 機密與配置管理 (Secret & Configuration Management): 安全地管理敏感資訊(如密碼)和應用程式配置。
    • 資源管理 (Resource Management): 為每個容器分配 CPU 和記憶體資源,並確保它們不會互相搶佔。
  • K8s 的核心概念:
    • Pod (最小部署單位): K8s 中最小的可部署計算單元,包含一個或多個容器。通常,一個 Pod 只包含一個應用程式的實例。
    • Node (節點): 運行 K8s 叢集的實體或虛擬機器。
    • Cluster (叢集): 由多個 Node 組成,由 K8s Master 管理。

3. 微服務架構 (Microservices Architecture) 🧩

  • 什麼是微服務架構? 微服務架構是一種軟體架構風格。它不是關於工具,而是關於如何設計和組織你的應用程式。傳統的應用程式通常是單體式 (Monolithic) 的,所有功能都集中在一個巨大的程式碼庫中。微服務則剛好相反。
  • 微服務的概念:
    • 分解與獨立: 將一個大型應用程式分解成一系列小型、獨立、鬆散耦合的服務。每個服務只專注於執行一個特定的業務功能(例如,訂單服務、用戶管理服務、支付服務)。
    • 獨立開發與部署: 每個微服務都可以由一個獨立的團隊開發、使用不同的程式語言和技術棧,並且可以獨立地部署和擴展。
    • API 通訊: 這些服務之間透過輕量級的通訊機制(通常是 API,例如 RESTful API 或 gRPC)進行互動,而不是直接呼叫程式碼。
  • 微服務的優點:
    • 靈活性 (Flexibility): 每個服務可以獨立更新和部署,不影響其他服務。
    • 可擴展性 (Scalability): 可以只擴展需要更多資源的特定服務,而不是整個應用程式。
    • 技術多樣性 (Technology Diversity): 團隊可以為每個服務選擇最適合的技術。
    • 團隊獨立性: 不同的團隊可以獨立工作,加速開發進度。
    • 故障隔離 (Fault Isolation): 一個服務的故障不會直接導致整個應用程式崩潰。
  • 微服務的挑戰:
    • 複雜性增加: 分布式系統的管理、監控、測試和除錯會更複雜。
    • 數據一致性: 跨多個服務的數據一致性是一個挑戰。
    • 網路延遲: 服務間的通訊會引入網路延遲。

Docker、Kubernetes 和微服務之間的關係:

它們是黃金組合

  • 微服務架構理念:定義了如何將應用程式設計成獨立的小塊。
  • Docker打包工具:提供了一種標準化的方式,將每個微服務打包成可移植、隔離的容器。
  • Kubernetes管理工具:提供了一個強大的平台,來部署、管理和自動化這些數量的 Docker 容器(微服務)。

這三者的結合,構成了現代雲原生應用程式開發和部署的基石。


留言
avatar-img
留言分享你的想法!
avatar-img
hello maple
4會員
81內容數
各種工作及生活中的小小紀錄
hello maple的其他內容
2025/06/04
微服務架構是一種將應用程式拆分為獨立、小型且可獨立部署服務的開發模式。相較於傳統單體應用,微服務具備更高的彈性、擴展性與技術多樣性。
Thumbnail
2025/06/04
微服務架構是一種將應用程式拆分為獨立、小型且可獨立部署服務的開發模式。相較於傳統單體應用,微服務具備更高的彈性、擴展性與技術多樣性。
Thumbnail
2025/06/04
CI/CD(持續整合與持續部署)是現代軟體開發的關鍵實踐。它透過頻繁的程式碼整合、自動化建構與測試(CI),以及將程式碼自動部署到生產環境(CD),大幅提升開發效率。CI/CD 讓團隊能更快交付高品質軟體,降低風險,並促進開發與運維團隊的緊密協作,是實現敏捷和 DevOps 的核心。
Thumbnail
2025/06/04
CI/CD(持續整合與持續部署)是現代軟體開發的關鍵實踐。它透過頻繁的程式碼整合、自動化建構與測試(CI),以及將程式碼自動部署到生產環境(CD),大幅提升開發效率。CI/CD 讓團隊能更快交付高品質軟體,降低風險,並促進開發與運維團隊的緊密協作,是實現敏捷和 DevOps 的核心。
Thumbnail
2025/06/04
這篇文章討論負載平衡的技術、類型、運作原理、常見演算法和應用場景,並解釋其如何與擴展性相關聯。
Thumbnail
2025/06/04
這篇文章討論負載平衡的技術、類型、運作原理、常見演算法和應用場景,並解釋其如何與擴展性相關聯。
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News