今天就要正式進入 DevOps 的環節了,首先要來介紹的是 Docker,之所以要先介紹 Docker 的原因是因為後面的 K8s 會大量的用到 Docker 的觀念,因此在開始介紹重頭戲前必須要先學習 Docker 的觀念,接下來就讓我們正式進入 Docker 的環節吧!
Docker 是一套輕量級的虛擬化工具,用於部屬應用, Docker 允許開發者將基礎設施(Infrastructure)中的應用單獨分割出來,形成一個又一個的 容器(container),進而提升整體系統的速度。
既然有了容器那就會有填滿這個容器的東西,而這個就是 映像檔(image),看到這邊不曉得讀者是否有感覺到跟一些我們常用的 虛擬機(Virtual Machine) 像是 VirtualBox 或 vmware 非常像,也是要去抓系統的 映像檔(ISO),最後再將這些映像檔藉由虛擬機掛載上去,難道 Docker 只是比較潮的 Virtual Machine?
其實兩者是完全不一樣的概念,接下來就來介紹一下兩者的差別吧!
簡單來說就是在現有的作業系統中再建立一個新的虛擬的作業系統,並利用這個虛擬的作業系統來處理事情,所以我們在使用 VirtualBox 或 vmware 時都必須要先設定 CPU 以及 記憶體 的大小,就像下圖這樣。
那這些虛擬化 CPU 跟 記憶體 是從那裡來呢?就是從電腦的 CPU 跟 記憶體 來,所以我們可以知道虛擬機就是要把整個硬體都虛擬化,最後再藉由這些虛擬化的硬體去安裝系統,但這樣就會非常吃電腦自身的資源,就像下圖這樣。
不曉得大家在使用這些虛擬機時有沒有發現一點,每次要啟動這些系統時都會耗時非常久,這都是因為要把整個硬體層都虛擬化的原因,接下來我們可以簡單的看一下虛擬機的架構:
從上面的架構圖我們可以很輕鬆地看到每個應用程式都必須要先依附在一個系統上,所以假如今天有三個應用程式每一種都要依附在不同的系統上的話,就必須要虛擬化三個硬體層跑三個系統了,這也會造成虛擬機非常吃電腦自身的資源,所以虛擬機的作用通常都是用來跑一個全新的作業系統來做事情,不會拿來當作是伺服器用來跑應用程式的工具。
Docker 最主要的功能就是在虛擬化「應用程式及其相對應的環境」,也就是我不用像虛擬機那樣還要去設定到底要讓整套系統擁有多少 CPU 以及 記憶體,只需要有應用程式的映像檔以及要讓這個應用程式運行的作業系統的映像檔,就可以讓這個應用程式順利運行了,所以整體效能會比虛擬機高非常多,也不用像虛擬機那樣那麼吃電腦資源了。
而因為 Docker 主要在虛擬化「應用程式及其相對應的環境」,所以對於 Docker 來說重要的不是硬體資源而是應用程式跟執行環境,因此假如今天的要執行應用程式是可以共用在同一個系統上,那我就想辦法把這些應用程式虛擬化成一個又一個的映像檔就好,所以 Docker 的架構就像下面這樣:
可以看到 Docker 在執行每一個應用程式前都不需要依附在不同的系統上,所以就不會像虛擬機那樣要占用很多電腦資源,而這也是為什麼伺服器很多都會利用 Docker 來執行應用程式。
所以簡單總結一下 Docker 跟虛擬機的不同之處就在於一個是虛擬化系統另一個是虛擬化硬體,這就是兩個最大的差別了。
上面 Docker 相關的先備知識講得差不多了,接下來講點不一樣的,不曉得為啥工程師很喜歡用 Hub 這個字來當作是管理相關事務的集合。
像 Git 有 GitHub
而 Docker 有 DockerHub
DockerHub 是用來存放所有 Docker 會用到的映像檔的大型倉庫,透過 DockerHub 我們就可以順利地引用這些映像檔來達到虛擬化「應用程式及其相對應的環境」,所以我們假如之後要利用的一些大神寫好的映像檔都可以從 DockerHub 這邊 pull 下來,想要知道有哪些映像檔可以用的讀者可以參考這個網站,裡面有各式各樣的映像檔可以供大家使用。
今天簡單的介紹了 Docker 以及 DockerHub 的相關知識,希望讀者能因此更了解 Docker,但只知道這些是沒用的,畢竟都還沒講要如何產生映像檔跟如何操作 Docker,而這些相關的內容都會在後面的文章一一為大家介紹。
下一篇文章就要介紹如何產生 Docker 映像檔,如果對於文章有任何問題都歡迎在下面留言給筆者,讓我們就下一篇文章見吧!