iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
IT管理

用自組NAS亂玩unRaid系列 第 26

Docker:甚麼是容器?

VM暫時告一段落,其實unraid上面的插件還是以容器(docker)最為大宗
像我們後面要做的雲端、還是一些「偷吃步」的插件(不是像「Unassign Disk」這種GUI套件而已,而是可以增加unRaid沒有功能的「擴充套件」
都須依靠docker運作
因此了解docker原裡與操作也十分重要


什麼是容器

假設今天有一種能裝很多東西的籃子:
而籃子裝滿了很多東西,有雞蛋、零食、水果、調味品…等
結果雞蛋不小心撞到地面破掉了,蛋汁流的籃子裡都是,所有東西幾乎都被「汙染」了 /images/emoticon/emoticon04.gif

這就是單個OS執行各種軟體環境造成的結果
每個軟體都這個環境上執行,久而久之不僅沒效率,還很容易因軟體問題導致系統崩潰或跟其他軟體衝突

俗話說的好:「雞蛋不要放在同一個籃子裡」,這時容器就發揮功用了
用它就可以將不同的軟體個別在單獨的環境執行

認識Docker

一談到container(容器),就不能不提這個最能代表container的平臺:Docker。

看看這支鯨魚,載了眾多箱子卻不感覺疲憊,反而給人一種強大輕巧的感覺
https://ithelp.ithome.com.tw/upload/images/20211001/20117399fGbEuabbCI.png
身為一個非常成熟的container平臺,不僅擁有眾多的開源容器映像;且安全性跟效能也非常穩定

  • Docker運作原理

https://ithelp.ithome.com.tw/upload/images/20211001/20117399I7m7RpwszL.png
(作圖:小雨)

Docker Engine會部屬在Hyperviser或OS上,目的只是為了讓系統內核能跟Docker做資料交換
畢竟Docker運作大多是應用程式(App)為主,就必須有底層內核來「驅動」

再往上一層會遇到相依性函式庫(Dependency Library),組成會有像執行檔(bin)、直譯器(python)、和一些App會用到的相依性套件
這層能為上層App提供必要的執行環境,舉個栗子:

像昨天剛「折騰」完的Wordpress網站,就可放在Docker上運行
這時

  • LAMP就有如Dependency Library為網站提供執行環境
  • Wordpress就相當於在LAMP上運作的App

而把Dependency Library跟App打包成一種img(映像檔),就是container,可直接在任何的Docker環境上執行

Hyperviser與Docker平台差別

相較於需安裝整個OS的Hyperviser而言,Docker提供了輕量級的環境供軟體執行
以將軟體包在img內提供個別服務的形式,可在不影響原系統的情況下運行服務
而Hyperviser是以硬體模擬的形式部署整個環境,就相當使用一臺真的電腦
以OS為單位的VM,可在獨立的環境中運作任何軟體

但這樣是不是Docker比較有優勢呢? 也不一定
因為container仍需透過OS進行開發,這時利用Hyperviser來打包Docker可在不影響原系統的情況進行完整開發流程

沒有哪個比較優,只能說各有千秋!

容器(Docker)的好處

如果只是為了使用軟體而利用Hyperviser安裝不同OS,反而非常浪費資源
不如直接使用Docker不僅不用硬體模擬就能有更好的效能,這樣只需一台電腦就能提供很多服務



結論

container的玩法比VM有著更多的彈性,就舉兩點:

  • 可移動性:意思是容器不僅在任何Docker平台可馬上使用,更可利用可透過Docker Hub(後面會談),做到版本控管、隨載隨用等功能
  • 可堆疊性:可在img內打包多個Dependency Library或App,不僅container之間不會相互衝突,也能有更多發揮的空間

上一篇
架站:Wordpress apps + DDNS+SSL+Port Forward
下一篇
Docker:Docker Hub Pull 流程
系列文
用自組NAS亂玩unRaid31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言