為什麼要使用容器? | container缺點
![為什麼要使用容器?](https://i.imgur.com/axBPWDg.jpg)
下班前(02/07Fri)同事問Container除了可以讓應用程式在本機與正式環境一樣,跟VM比較起來還有什麼好處?認真說可以說很多,簡單整理我在三分鐘內口述的東西,因為要趕公車,三分鐘到了我就先跑了XDD,這段文字是在公車上敲下的,原文點這裡[1]。當下第一個直覺就是清楚的資源邊界:隔離性,衍生的議題就是資源管理與成本。第二個想到的就是資安,衍生議題就是系統維運(Operations)。所以先針對這兩個部分描述。隔離性:資源有效利用以前寫C大概都遇過一些問題:KernelPanic[2],在Windows就是BlueScreen[3],很常發生就是錯誤的記憶體...
![為什麼要使用容器?](https://i.imgur.com/H8YKUrg.jpg)
下班前 (02/07 Fri) 同事問 Container 除了可以讓應用程式在本機與正式環境一樣,跟 VM 比較起來還有什麼好處?認真說可以說很多,簡單整理 我在三分鐘內口述的東西,因為要趕公車,三分鐘到了我就先跑了XDD,這段文字是在公車上敲下的,原文點 這裡[1]。
當下第一個直覺就是清楚的資源邊界:隔離性,衍生的議題就是 資源管理 與 成本。第二個想到的就是 資安,衍生議題就是 系統維運 (Operations) 。所以先針對這兩個部分描述。
隔離性:資源有效利用以前寫 C 大概都遇過一些問題: Kernel Panic[2],在 Windows 就是 Blue Screen[3],很常發生就是錯誤的記憶體空間存取,像是把 Kernel Space[4] 寫壞了,整個 OS 就炸鍋了。後來一些高階語言,為了避免類似的問題,都不讓開發者自行操作記憶體空間,透過語言層級的存取隔離性。
回到 Container 的好處:隔離性 (Isolation),這是 Container 呈現的現象,背後的動機是 資源分配 (Resource Allocation)。一台機器就是資源,資源如何有效地被利用,第一個把關的是 作業系統 (Operating Systems)[5],然後就是 應用程式 (Application) 自己。一台電腦可以開多少應用程式是有限制的。
想像一個貨櫃能載多少貨,也是有上限的。如果每個貨品大小都不一,那就麽貨櫃空間就無法有效地被利用。貨櫃空間能夠最有效利用,就是每個箱子大小都一樣,把整個貨櫃填滿,這個大小就是 基礎單位。而每個箱子必須有一定的強度,不能隨便一碰或者擠壓就壞掉,或者裡面的貨品就被弄壞。
AWS 的 EC2 是一種虛擬技術,每個 AWS Account 開啟的機器,預設會跑在不同的實體機器,AWS 的客戶之間並不會相互干擾,也就是 Account A 跟 Account B 都各有一台 VM 跑在同一台實體機器,並不會因為其中一台 CPU 100% 就影響另一台機器。這個就是隔離性,也就是資源分配的概念。如果 VM 的資源會相互干擾,就會衍生出爭議。當然 AWS 也有真的共用資源的 t2...