容器(Container)是一種虛擬化技術,它可以將應用程序及其所有依賴項(如程式庫、配置文件等)打包成一個獨立的單元,稱為 容器映像檔(Container Image)。
容器映像檔(Container Image) 具有輕量、可攜、易於複製 的特性,能快速的建構應用程序再不同的主機上,不必擔心環境差異的問題。
另外容器也具有相當好的隔離性,你能在同個主機能同時運行多個不同的 容器(Container),且彼此獨立隔離,確保應用程序運作穩定,再實務上也提升了運算資源的利用效率。
圖檔來源 (Containers vs. virtual machines)
左側的圖示代表傳統的虛擬機 (VM) 部署架構,每個應用程序都運行於一個 VM 實例上,這帶來了一些缺點
而右側為容器架構的部署方式,數個內含應用程序的容器 都運行於 Container Engine(如 Docker)之上,共享同一個作業系統的資源,這提供了以下優勢
容器共用了 Host 主機的作業系統,無需運行自己的作業系統,大幅加速了啟動速度
再容器化技術出現之前,大多服務的部署方式都是
「為什麼我本地能運行,但上了伺服器卻有問題」
相信大家多少有類似的經驗,除了網路與應用程序內部參數設定的問題之外,很常見的情況就是 環境差異,Server OS 上的環境多少跟你的開發環境 跟 你開發/測試時的運行環境很可能是有差異的,可能是缺少某些函式庫、函示庫版本不同 或是 權限配置。
容器一致性的特性能有效改善此問題,讓將依賴項管理左移到開發/測試階段,降低服務部署的風險。
容器技術的特性,對於 software developer 與 sever administrator 都帶來了許多好處
對於 Software developer:
環境一致性: 容器將應用程式及其相依性封裝在一個容器中,確保開發環境和生產環境之間的一致性,減少了「在我的機器上能運作」問題。
快速開發和測試: 容器可以迅速啟動,開發者可以在幾秒內建立和測試應用程式,加快了開發週期。
簡化部署: 開發者可以在本地編寫和測試容器,然後將相同的容器部署到生產環境,減少了部署中的問題和不一致性。
微服務架構: 容器適用於微服務架構,使開發者能夠將不同部分的應用程式獨立打包為容器,並簡化維護和擴展。
對於 Sever administrator:
資源利用率: 容器共用主機資源,提高了資源利用率,允許在同一伺服器上運行多個容器,節省硬體成本。
簡化部署和維護: 容器的生命週期管理簡單,容易自動化,降低了部署和維護的工作負擔。
隔離性和安全性: 容器提供隔離性,確保不同容器之間無法干擾,有利於提高應用程式的安全性。
擴展性: 伺服器管理員可以快速擴展容器,以應對流量增加,而無需修改應用程式的代碼。
故障恢復: 容器管理工具通常具有故障恢復和自動擴展功能,提高了應用程式的可用性。
今天我們大致瞭解了容器化的好處,接下來會花個兩天左右的篇幅,介紹如何使用 Docker 這個 Container Engine 來運行服務 與 如何將你的應用軟體打包成 容器映像檔(Container Image)。