在軟體的世界裡,所有東西最後都是人眼看不到的數位訊號,這也是為什麼軟體很多知識很不容易跟領域外的人解釋,
但是,要解釋原理,還有一種很棒的方法,就是拿現實中的已經存在的概念來比喻,
那 Docker 呢?
光是講那些 Docker 的術語,例如我在 D7 - Docker 概念架構 提到了虛擬技術
、容器
、共享
、硬體資源
等等,對於剛接觸 Docker 的人,聽到這些詞彙完全就是一些無意義的雜訊,會很難理解為什麼需要 Docker,
我們可以用什麼來比喻 Docker 呢?讓我們來看看這幾個情境:
想像我們要自己拍一部《 斯卡羅 》(一部電視劇),
它的場景是設定在 19 世紀恆春一帶的故事,當時的建築跟風景肯定跟現在不同,因此我們需要選擇近似的場景來做拍攝,
而現實中斯卡羅的拍攝團隊為了追求逼真,甚至打造了一個外觀跟當時風格相近的小城鎮作為拍攝場景,
我們拿「拍電影」這件事來對虛擬技術做比喻,
虛擬技術是要「模擬出某個東西」的技術,我們想要就像我們想要拍攝出「看起來就像 19 世紀恆春」的畫面,雖然它們是假的,但是跟真的一樣,用來實現這件事情的就是虛擬技術。
當然如果要最真實地呈現,就會是像紀錄片一樣,錄下事件的始末,因為那些就是真實發生的過程,
比喻到軟體上,當我們直接建置一個環境,同時最後這個環境要提供給客戶使用,它「就是」最後的成品,那當然測試起來是最真實的,
然而這麼做的問題,就是既耗時又花錢 (e.g. 硬體/伺服器費用)。
像斯卡羅團隊那樣,搭建出等比例擬真的場景,也能帶來很好的效果,
並不是真的建造出可以居住的房屋或當時的地形,而是外觀上很近似的外殼或材質,
時間與人力物力的成本雖然低於真正的房屋,但也不低,
而對應到軟體,有個技術稱為「虛擬機器」(Virtual Machine aka. VM),
可以在電腦上「以軟體模擬出另一台電腦」,例如我的電腦是 Mac,如果模擬 Windows 執行程式的情況,可以在 Mac 電腦上用軟體啟動一台 Windows 的虛擬機器,這台 Windows 能擁有所有一台電腦該有的東西:硬碟、記憶體、網路等等,但都是虛擬出來的。
而在攝影棚裡做拍攝,一來是拍攝地點可以在都市內,二來是只要把背景換掉、或是加上所謂綠幕,就能一定程度地模擬出要拍攝的場景,例如其他的室內場景、或用特效做出像是海邊的畫面,
雖然真實度有差距,但拍攝的成本能夠最低 (大概啦,以我影視外行人的理解),而且可以更快速地更改要拍攝的場景,
Docker 就像是攝影棚,既省資源、又快速,不同的攝影棚也可以共享硬體 (例如中央空調或廁所) 或軟體 (例如大樓的保全人員) 的資源,
一個 Docker Container 就像是一間攝影棚,既共享了整台電腦的硬體資源、也共享了作業系統的軟體資源。
這樣我們可以分成三種程度:
這三種程度,是要根據場景去使用的,就像拍攝手法一樣,並不是絕對的好跟壞,
只不過,現在有越來越多的開發跟運行都是透過 Docker,在成本跟方便性上都有很大的好處,
而透過今天的比喻,希望讓不瞭解 Docker 的讀者,也可以稍稍理解這個技術的概念。