最近開始研究 kubernetes (k8s),由於會使用到許多Docker相關技術,因此在這邊整理一篇,分享給各位。
Docker 介紹
Docker技術絕對是近幾年內非常火紅的技術,如果你還不了解Docker那你就落伍了,馬上就會各位介紹Docker為什麼會如此熱門的原因。
以前假設在公司內,如果要將一套軟體部署上線,都必須在一台一台電腦內安裝該軟體所需的環境與環境參數等。假設在A電腦內順利安裝軟體後,且軟體能正常執行;但在B電腦內採用跟A完全一模一樣的安方式,但卻怎麼都無法正常運行程式,到底為什麼呢?由於每一台電腦的內的硬體規格 、軟體設定、環境參數可能都有所不同,雖然採用一樣的SOP安裝流程,但那隻程式也須就是剛好能在A的環境下執行B則不行,就是有可能會遇到無法解決的問題產生。
如果你是工程師,就可能在心中默默自言自語說,如果我們能將A的環境直接拷貝出來貼到B的電腦多好呀!但別說,這剛好就是Docker的強項所在了,Docker可以讓各個應用程式獨立在一個單獨的環境運行,並且可以將(1)環境快速打包、(2)交付給其他人使用、(3)執行快速部屬、(4)執行測試 (5) 部屬成本低、(6)管理成本更低,以上就是Docker的特點,也是虛擬化技術的強項之一。那你一定會問說這不就跟虛擬機器(Virtual machine)功能很類似嗎?看完下述介紹,你就會知道Docker與Virtual machin差異,並了解Docker強大之處。
Virtual machine(虛擬機器 VM) vs Docker Container
Dokcer 與 Virtual machine都是屬於虛擬化技術的一種,但Virtual machine是屬於在系統層級的虛擬化技術。而Dokcer是一種則是在作業系統層級的虛擬化技術,稱之為容器(Container)。
總結:Virtual machine打包整個作業系統,Container打包應用程式。
以下詳細介紹 Virtual machine(虛擬機器 VM) 與 Docker Container的差異,並整理出其優缺點。
● Virtual machine(虛擬機器 VM)
主要希望建立一個應用程式所需要的環境,並將此環境打包後,移動到不同硬體環境時,也能以相同環境來啟動。
重點:Virtual machine是以作業系統為中心的虛擬化技術。
Virtual machine是一種基於硬體上的虛擬化技術,可以在電腦的Host OS上,再建立一套完整的Guest OS。換句話說,就是可以在電腦內在建立多部電腦的意思。Virtual machine可以依據你所需的環境,建立不同的作業系統 與 環境,以便用來進行其他作業系統測試存取感染病毒的資料、建立作業系統備份,以及在作業系統上執行原本未打算執行的軟體或應用程式。
● Docker
Dokcer 主要是希望透過容器化(Container)的方式,將應用程式(APP)包在Container內,並可以快速部屬到其他硬體上的方時運行。
重點:Docker是以應用程式為中心的虛擬化技術。
Docker 的Container是基於作業系統層上進行虛擬化,比VM在建置環境時,還必須同時安裝作業系統的時間與空間成本上達到大幅降低的目的。
Container透過Container Manager 來管理APP所需的程式碼、函式庫、環境設定等 打包後,會建立一套資源控管機制來管理與隔離Container,最後來分配Host OS上面的資源。
由於不需要安裝Guest OS,因此我們在建立Container時,能大幅漸少硬碟使用空間,且由於Container不包含Guest OS,因此在啟動Container時,能夠更快速啟動應用程式。
Host OS與Guest OS名詞解釋:簡單來說,Host OS是主人系統;Guest OS是客人系統。假設我要在我的電腦上安裝Windows10系統,該Windows10系統就是指Host OS(主人),而我又想在Windows10上安裝Virtual machine,然後在Virtual machine內安裝Ubuntu,該Ubuntu就是指GuestOS(客人)
Docker 三大組成元素
● 映像檔 (Image)
Docker Image 是一個唯讀的環境,Image裡面除了包含環境外,也包含了所有程式(包括應用程式、相關函式庫、設定檔),用來建立Docker容器。舉例來說,一個網頁的執行環境映像檔內會有Ubuntu OS、Apache網站伺服器、MySQL資料庫等等設定,都會一併函在Docker Image內。此環境就像一個光碟片一樣,可以隨時帶走,當需要部署時,只需要放入光碟片,將環境打開後,該程式即可順利運行。
● 容器 (Container)
Docker Container 是由Docker Image建立的一個容器。而容器則是是映像檔的可寫層。容器是一個簡易版的 Linux 環境應用程式並可在其中運行程式。一個映像檔可以建立多個容器,每個容器都是相互隔離的。
● 倉庫 (Repository)
目前最大的的Docker Repository為:Docker Hub。Docker Hub就像我們熟悉的GitHub一樣,是一個線上伺服器,只是GitHub儲存的是許多的程式碼。但Docker Hub則儲存大量Docker Image。每個人都可以上傳自己的專案,也可以下載別人的專案,有時也可以在某些開源專案,提問或提交自己的程式碼。同時,Docker Hub也提供私有與公開的專案類型,如果專案不想被公開,則需要申請付費帳號。
總結
此章節為各位介紹Docker基本知識後,下一章節會為各位進入Docker安裝與 實際操作。
Reference:
- https://medium.com/@VisonLi/docker-%E5%85%A5%E9%96%80-%E7%AD%86%E8%A8%98-part-1-6e83dec901ac
- https://medium.com/unorthodox-paranoid/docker-tutorial-101-c3808b899ac6
- https://kknews.cc/zh-tw/code/3y9v663.html
- https://ithelp.ithome.com.tw/articles/10190614
- https://tw.alphacamp.co/blog/docker-introduction
- https://docs.microsoft.com/zh-tw/virtualization/windowscontainers/about/containers-vs-vm