從古至今,發布軟體的方式不斷演變,從早期的 manually deployment 到這幾年常見的容器話工具,幫助我們省去需多時間、人力、還有金錢。
在開始之前,我們一起看看 Application Deployment 的歷史
早在西元 2000 年前,但凡你需要發佈一套系統,就得購買一台實體伺服器,當你有多套系統要發佈,就必須擁有多台的實體伺服器,每台伺服器的管裡與維護皆需要大量的人力、時間、金錢來完成。倘若有軟體需要發佈到不同的伺服器上,也可能因為每一台的伺服器規格或設置不同,導致軟體需要調整。
想想在 Client-Server Architecture 之下,一台 server 需要負擔的 clients 請求量有多大?需要消耗多少記憶體,CPU 多少才夠?
設想當 server 的資源不夠用,或者在採買 server 前高估了需求,導致之後要在 server 上調整,都是相當好成本的開銷。
VM 把上個世代的實體伺服器「虛擬化」,多個 VM 可以「同時運行」在一台實體主機上,這台可以運行單、多的 VM 的實體主機普遍稱 Host Machine,那些運行在 Host Machine 上的 VM 普遍稱作 Guest Machine,這些 VM 共享了實體主機的資源,不管是記憶體容量,還是 CPU 等等。
市上常見的 Virtual Machine Monitor 為 Hypervisor,分成 Type 1 和 Type 2:
Type 1 :
1.直接在 Host Machine 的硬體上執行,執行效率高
2.需要硬體支援
3.監控、控制 Host Machine 上的硬體分配情形,以及 Guest Machine 的作業系統
Type 2 :
1.在 Host Machine 的作業系統上執行,相較 Type 1,執行效率較低
2.作為應用程式,如他其他程式在做作業系統上執行
使用 VM 的好處
-減省租用、購買多台 Server 的開銷
-非常彈性,不同作業系統能同時在同一台主機上運行
-有效運用主機資源,讓每個資源都能充分利用
使用 VM 的壞處
-效能較差,相比同樣的作業系統、軟體直接架在主機上來的更低效能
-兼容性問題,作業系統、軟體可能因為架在不同的硬體主機上導致不正常運作,或直接無法運作
和 VM 差異在於:
VM 是在實體主機虛擬化出來多個作業系統; Container 是在作業系統上虛擬化出來多個執行環境。
也就是原本一個 OS 只能跑一個 App,變成一個 OS 可以跑多個 App。
試想一位太空人穿上太空衣,他就能在宇宙間的各個星球輕鬆的遊走; Container 就像應用程式的太空衣,讓應用程式在不同的環境之下,都能夠迅速地適應並正常運作。
Container 封裝了運作應用程式所需的執行環境包括 Libraries, Dependencies, Configuration,利用這種形式快速從地端部署到雲端,或者雲端到地端。