Container 概念

 

Container 概念筆記

https://medium.com/@jinghua.shih/container-%E6%A6%82%E5%BF%B5%E7%AD%86%E8%A8%98-b0963ae2d7c6

 

最近好常聽到 Container, Docker, Kubernetes, Microservice 這些名詞,該是時候來好好梳理清楚了。

先一句話簡介以上四個字的關係:

Docker 是一個讓 Container 標準化的專案 /工具,而 Kubernetes 是用來管理 Container 的系統。Microservice 是基於 Container 之上快速發展起來的概念。

很明顯的,要暸解以上這些東西,就要先暸解 Container。但要暸解 Container,還要先暸解一個概念叫做虛擬機器。

虛擬機器 Virtual Machine

在 Container 的概念尚未開始流行之前,一般而言一個應用程式的執行會是透過虛擬機器(以下簡稱 VM)來進行。為什麼不直接執行應用程式呢?因爲每台主機的環境配置、作業系統都不盡相同,所以當一台主機要直接執行用另外一台主機開發出來的應用程式,很可能會因為環境不一致的關係而失敗。VM 的概念是在將應用程式打包時,除了程式本身,還順便一起打包開發的作業系統,當任何一台主機(Host OS)要執行此應用程式時,就可以在 VM 中先下載裝有此應用程式所需一切資源的作業系統(此稱 Guest OS), 模擬出一個熟悉的空間給此應用程式,這樣就能確保應用程式的順利執行。

VM 的好處有

但 VM 同時也有一個顯而易見的缺點:冗。時間上來說,每次都要先在 VM 裡面裝好一套作業系統才能執行應用程式,建好作業系統也要等開機,所以 VM 的建立速度就不會很快(大約是幾十秒到幾分鐘)。空間上來說,一套作業系統大都上百 MB,就算應用程式本身只有幾 KB,還是必須要耗費一整個作業系統的資源。資源分配上來說,實體伺服器不只要分配資源給應用程式本身,也會需要將一部份運算資源分給作業系統的執行,是個必要之惡。

容器 Container

為了改善 VM 不能把錢(資源)花在刀口上的缺憾,Container 登場了。

Container 同樣是將應用程式連同其所需環境(相關程式碼、函式庫、環境配置檔)一同打包的技術,但是在 Container 中不需要安裝作業系統就能執行應用程式。既然 Container 不像 VM 那樣自己的作業系統自己做,那 Container 要在哪裡運行呢?答案是在 Host OS 的核心系統層。

所有 Container 共用 Host OS,並建立資源控管機制來分配 Host OS 上的系統資源,因此省去了執行 Guest OS 的時間與心力,而能夠同時做到每個 Container 互相獨立。就像在雨水中旋開的一把把雨傘, Container 在同一個空間中,卻又彼此有自己獨立的傘下空間。

所以說,VM 的中心是作業系統,而 Container 的中心是應用程式。

Container 的優勢基本上都跟甩掉了大個子 Guest OS 有關:

但 Container 也不是一個完美情人。比如說它沒有建立自己的作業系統,所以只能依賴 Host OS,並且縱然它解決了很多 VM 的限制,想要體驗 Container 的完整威力,就要先將應用程式變成等等會提到的 Microservice,不然 Container 就只會是一個讓你比較容易打包的工具而已。

Docker 是目前最流行的一個容器化技術。它創造了一個標準化的 container 製造程序,讓應用程式具有相同的封裝方式、啟動方式、存取方式,不用修改就能在任何支援 Docker 的平臺上執行。

Docker 映像檔(Dockerfile)是讓 Docker 之所以強大的關鍵(之一)。Container 在打包的過程,所有這個 Container 需要的程式和設定資訊都會放在 Dockerfile 中,於是在所有支援 Docker 的環境中執行這個 Dockerfile,就能夠確保建立一模一樣的 Container。

Docker 一個很大的影響是波及了 PaaS (平台即服務)的生計,因為 IaaS 平臺只要支援 Docker,就可以執行 Container 中的應用程式,不再需要設定 Virtual Machine,因此很容易就可以達成 PaaS 的功能。

想要看有更深入一點的細節但又不要太深的導覽文章可以參考這篇文章

Kubernetes

有了 Container 改善傳統 Virtual Machine 的笨重、有了 Docker 來標準化 Container 的製造,再一個能夠讓你輕鬆管理 Container 的平台,聽起來挺完美的吧?Kubernetes 就是如此平台,所謂 Container Orchestration Platform。Kubernetes 介紹就到這。我是認真的。

微服務 Microservice

容器化的技術讓應用程式能夠被打包成更輕量簡便的包裹,於是「微服務」的概念就興起了。在此風潮之前,傳統的單體架構(Monolithic Architecture)是所有的資源、功能、操作等等放在一個應用程式中,彼此之間關係緊密,因此常常會有改一個小細節就必須波及許多部分的「牽一髮而動全身」的情況,所以可擴展性(Scalability)就不能很高。

於是微服務出現了。微服務是一種重新建構應用程式的方法,將一個應用程式中不同的功能切開,變成彼此獨立的運作個體。

幾個特色:

留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

WireMock