文章總列表

iperf奇遇之Docker篇

前一篇iperf測試篇,沒有寫的細節是,我在NAS主機透過Docker運行iperf服務。這篇來看Docker這個重要IT技術的概論

我家的Synology DS411+II從2011年已經上線10年了,機器很穩定,裝完即忘。我突然有個念頭,能不能把iperf跑在NAS,隨時就能測。答案是不可以,群暉沒有提供iperf套件;但是也可以,群暉提供Docker,可以在Docker之上跑iperf

多年來我始終沒搞清楚Docker,這篇我用自己的觀點,幫這個地球增加一篇Docker概念說明文


Docker的代表圖案是一艘貨輪;底下的貨輪是執行Docker服務的主機,高規格的電腦就像十萬噸級貨輪長賜號,可以載很多貨櫃塞住蘇伊士運河

貨櫃是很好的比喻(後面會不斷使用),他有固定的尺寸和形狀,堅硬的外殼,任何人把貨品照著規格打包就能上船運輸;貨櫃不在乎是長賜輪或是小漁船;貨櫃之間彼此也不互相干擾,同在船上的貨櫃不需要彼此社交

我的NAS裝上Docker以後就變成一艘…能放貨櫃的小漁船,下載iperf貨櫃回來跑,很快NAS就多了iperf主機功能;想安裝別的軟體,也可以下載別的貨櫃回來跑。所以Docker服務對我的價值是,給NAS安裝新軟體變簡單了,抓回來就跑,沒有困難

----

上述的比喻再想深一點,其實沒那麼簡單,因為軟體其實依賴某個環境才能跑。比如以前Windows要打3D game要安裝DirectX;如果要打懷舊遊戲,也許得裝個舊版的DirectX;如果想同時玩新舊遊戲,可能得安裝新舊版本DirectX,也許微軟根本不給這麼做。這代表,軟體要正常運作,除了軟體本身,還包括他依賴的環境

假如一台電腦要同時跑上千套軟體,根本不可能同時安裝所有基礎設施,如上述範例, 想安裝兩個版本DirectX搞不好都困難重重

所以Docker卓越之處在於,貨櫃除了封裝軟體,還一併封裝環境,因此能抓下來就跑,不用安裝軟體。另外貨櫃的隱喻代表環境的隔離,每個貨櫃能用不同的基礎設施

----

所以什麼是環境?我會說是Linux作業系統加上相關軟體;我們來看一下Docker特異功能
  1. 我的NAS跑群暉Linux,上面執行Docker服務

  2. Docker服務會啟動一個虛擬的環境,裡面想做什麼都可以!所以我就下載了iperf3貨櫃,建構於Alpine Linux。在虛擬環境裡,跑另外一個Alpine Linux啟動iperf3,然後我的NAS就有iperf3了

  3. 我也可以下載Debian Linux貨櫃來跑,我可以在貨櫃裡加裝ssh,就可以遠端登入,用起來就像另外一台Linux電腦


  4. 這時候我的機器就像這樣,大腸(群暉Linux)包兩個小腸(iperf3 & ssh),邏輯上來講,我的NAS一共有三台機器,而且彼此不互相干擾!
  5. 我沒有認真看,但是我就這麼認為了:每個貨櫃都是Linux裡的程序,在程序裡跑是完整(或邏輯上)獨立的Linux系統;程序之間彼此是互相獨立的

  6. Docker依賴很多Linux底層的機制才能把整個作業系統塞進去跑,反正從外面來看,每個貨櫃都是獨立作業系統

-----

身為麻瓜,要怎麼很好的理解Docker?他可以把一台電腦當很多台用;每個小電腦都是一個又一個的貨櫃;只要資源還沒用光,想跑幾台都沒問題

Docker跑的時候,每台小機器就是一個小工作,非常輕量;假如某個網路服務已經Docker化,臨時負載變大,只要找到機器就可以臨時“加開伺服器”,彈性很高。或是每個人都有不同的任務要跑,可以把這些任務全部丟上Docker,使用彈性很大

一般看文章會說這種技術叫虛擬化,我管他叫大腸包小小腸,Docker是輕量型的小小腸;

重量級的虛擬化像是VMware,或是win10開始內建的Hyper-V。他能模擬出一台懷舊電腦,在裡面裝DOS 6.22然後執行美少女夢工廠2;或是買一台很強大的機器,裝上VMware以後,分給10個人用。我管這種技術叫大腸包小腸

小腸比起小小腸,能做的事更多,資源消耗也多;實務上兩種都好用,看應用場合。像我那台孱弱的NAS主機,只有1GB記憶體和Intel Atom處理器,根本不可能跑虛擬機。跑起輕量的Docker非常好用

----

所以Docker或是VM技術,本質上都是一台機器當很多台用,很好用,看起來他們已經部署在世界各地了;這個世界也不能沒有他們

做完這個研究,下次我看到Docker文章,起碼不是徹頭徹尾的麻瓜了;也希望這篇文章錯誤不要太多,讀過文章以後,稍微理解Docker是什麼😀

留言

這個網誌中的熱門文章

幼犬書桌椅選擇心得 升降桌 兒童桌椅

Herman Miller Aeron 一代氣壓棒維修

JUJU-250 升降桌 電腦主機 桌下安裝 調整心得