iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0

Day-02-Container 是什麼

Container 是什麼

容器(Container)是一種虛擬化技術,它可以將應用程序及其所有依賴項(如程式庫、配置文件等)打包成一個獨立的單元,稱為 容器映像檔(Container Image)。

容器映像檔(Container Image) 具有輕量、可攜、易於複製 的特性,能快速的建構應用程序再不同的主機上,不必擔心環境差異的問題。
另外容器也具有相當好的隔離性,你能在同個主機能同時運行多個不同的 容器(Container),且彼此獨立隔離,確保應用程序運作穩定,再實務上也提升了運算資源的利用效率。

與 VM 相比

T

圖檔來源 (Containers vs. virtual machines)

左側的圖示代表傳統的虛擬機 (VM) 部署架構,每個應用程序都運行於一個 VM 實例上,這帶來了一些缺點

  • 更多的資源消耗: VM需要更多的資源,包括記憶體和處理器,因為每個VM都包括完整的作業系統 (Guest OS)。
  • 環境差異性: 每台 VM 都手動安裝和配置依賴函式庫,環境可能存在差異。
  • 啟動時間緩慢: VM的啟動時間較長,可能需要幾分鐘。

而右側為容器架構的部署方式,數個內含應用程序的容器 都運行於 Container Engine(如 Docker)之上,共享同一個作業系統的資源,這提供了以下優勢

  • 輕量級: 容器非常輕量,多個容器可以共用相同的主機核心,因此資源消耗較低。
  • 快速啟動: 容器可以在幾秒內啟動,使應用程式可以快速部署和擴展。

    容器共用了 Host 主機的作業系統,無需運行自己的作業系統,大幅加速了啟動速度

  • 一致性: 容器包含應用程式及其相依性,確保在不同環境中的一致運行。
  • 易於管理: 容器的生命週期管理簡單,並且容易自動化,降低了管理成本。

使用案例 - 更穩定的部署

再容器化技術出現之前,大多服務的部署方式都是

  1. 由 應用軟體開發者(通常是軟體工程師) 提供編譯並打包好的應用軟體運行檔(如 Jar)
  2. Server 管理者 將 應用軟體運行檔 上傳至 Server 中,並啟動該運行檔
  3. Server 管理者打給你:你的服務跑不起來欸,過來看一下錯誤訊息 (X

「為什麼我本地能運行,但上了伺服器卻有問題」

相信大家多少有類似的經驗,除了網路與應用程序內部參數設定的問題之外,很常見的情況就是 環境差異,Server OS 上的環境多少跟你的開發環境 跟 你開發/測試時的運行環境很可能是有差異的,可能是缺少某些函式庫、函示庫版本不同 或是 權限配置。

容器一致性的特性能有效改善此問題,讓將依賴項管理左移到開發/測試階段,降低服務部署的風險。

結論

容器技術的特性,對於 software developer 與 sever administrator 都帶來了許多好處

對於 Software developer:

  • 環境一致性: 容器將應用程式及其相依性封裝在一個容器中,確保開發環境和生產環境之間的一致性,減少了「在我的機器上能運作」問題。

  • 快速開發和測試: 容器可以迅速啟動,開發者可以在幾秒內建立和測試應用程式,加快了開發週期。

  • 簡化部署: 開發者可以在本地編寫和測試容器,然後將相同的容器部署到生產環境,減少了部署中的問題和不一致性。

  • 微服務架構: 容器適用於微服務架構,使開發者能夠將不同部分的應用程式獨立打包為容器,並簡化維護和擴展。

對於 Sever administrator:

  • 資源利用率: 容器共用主機資源,提高了資源利用率,允許在同一伺服器上運行多個容器,節省硬體成本。

  • 簡化部署和維護: 容器的生命週期管理簡單,容易自動化,降低了部署和維護的工作負擔。

  • 隔離性和安全性: 容器提供隔離性,確保不同容器之間無法干擾,有利於提高應用程式的安全性。

  • 擴展性: 伺服器管理員可以快速擴展容器,以應對流量增加,而無需修改應用程式的代碼。

  • 故障恢復: 容器管理工具通常具有故障恢復和自動擴展功能,提高了應用程式的可用性。

今天我們大致瞭解了容器化的好處,接下來會花個兩天左右的篇幅,介紹如何使用 Docker 這個 Container Engine 來運行服務 與 如何將你的應用軟體打包成 容器映像檔(Container Image)。


上一篇
Day-01-大綱與架構
下一篇
Day-03-Docker 介紹-如何使用 Container Image
系列文
從Software Developer的角度一起認識 Kubernetes30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言