從資源利用率角度來看 Docker 、k8s 、Serverless
一般的物理服務器都會有很強的 CPU 核心、內存、網卡等。為了充分利用這些硬件資源,就有了虛擬化技術,物理服務器上可以虛擬出很多的虛擬機(VM),每個虛擬機都擁有獨立的操作系統(windows、linux等)。根據需求來分配具體的硬件資源(CPU、內存等),就可以盡量大的利用物理服務器資源。
Docker
Docker 的出現,原因肯定有對虛擬機的資源利用率還是不滿意,繼續提高服務器的資源利用率。Docker 就是對機器的利用率到了進程級別,更細的控制 CPU、內存等。
k8s
Docker 可以在一臺機器上快速的啟動、關閉容器,但是缺乏對大量容器自動編排、管理和調度。k8s 就是一套管理系統,對容器進行更高級更靈活的管理。你只需要提供服務器,k8s 通過對容器的編排可以幫你最大化的利用這些服務器的資源。
Serverless
云服務可以讓我們選擇合適配置的虛擬的云主機,然后按時、按月、按年的收費,但不管你使用與否,費用都在那里,不增不減。Serverless 則可以讓你只在使用時,根據使用時間、內存占用等一些你具體使用的東西來收費,不管你使用的頻率高低都可以承受,就像水和電,用了多少就是多少費用。
前端工程中的使用
不同與服務端很多程序,前端代碼運行在客戶機器上。Docker 在前端工程上的使用,出發點和服務端程序,會有所不同。
Docker 的使用場景
構建部署發布
通常的前端應用構建部署流程:
安裝依賴
執行構建命令,生成靜態資源
上傳靜態資源到對應服務器
加入 Docker 理念后,前二個步驟幾乎相同,理想的流程大致為:
安裝依賴
執行構建命令,生成靜態資源
構建容器鏡像
上傳容器鏡像
拉取鏡像,啟動容器
步驟 3 中,構建出的鏡像里面包括:
Web 服務器(一般都是從一個 nginx 基礎鏡像開始)
Web 服務器的相關配置
構建完的靜態資源
一部分靜態資源在構建完成之后也可以上傳到 CDN 上,但是因為靜態資源的大小幾乎不會很大,所以放到鏡像中沒有多大問題。