# 專題筆記: VM 與 Docker ###### tags: `專題` ( 09/22 - 09/28, 2022 ) <!-- -------------------------------------------------- --> VM (虛擬機器) --- ### VM 是什麼 用來建立虛擬化運算環境的技術(OS層級虛擬化),也是第一代雲端運算的基礎。 ### VM 的用途 - 試用新的作業系統。 - 建置應用程式並將其部署到雲端。 - 啟動新的環境,讓開發人員能夠更輕鬆快速地執行開發/測試案例。 虛擬機器無法與實體電腦直接互動,而是需要藉助一個叫做虛擬機器監視器(Hypervisor)的輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調。 註解: - Hypervisor 負責將實體運算資源(例如處理器、記憶體、儲存設備)配置給每個虛擬機器 - Host OS 是電腦上的OS - Guest OS 是指安裝在VM的OS ### 架構圖 ![VM架構圖](https://i.imgur.com/Klm0lfG.png) ### 參考網址 [虛擬機器 (VM)](https://www.ibm.com/tw-zh/cloud/learn/virtual-machines) [什麼是虛擬機器 (VM)?](https://azure.microsoft.com/zh-tw/resources/cloud-computing-dictionary/what-is-a-virtual-machine/#overview) <!-- -------------------------------------------------- --> Docker --- ### Docker 是什麼 Docker 是個管理容器的服務,提供應用層級虛擬化技術。容器不像虛擬機要在Host OS上再安裝Guest OS,而可以直接共用底層Host OS 的資源,同時具備其應用程式沙盒的隔離性。 ### Docker 的概念 - Dockerfile 像是自動化腳本,用來創建鏡像,就像在虛擬機安裝作業系統跟軟體,只不過變成自動執行。 - Image / 鏡像 包含要部屬的應用程式以及有關聯的所有函示庫,通過鏡像,可以建立容器。 - Container / 容器 Docker利用容器來執行應用程式,可以被啟動、開始、停止、刪除,而每個容器都是相互隔離、保證安全的平台。 - Repository / 倉庫 集中存放映像檔檔案的場所,分為公開和私有兩種形式。 ### Docker 的用途 - 確保執行環境一致 避免開發、測試、生產環境不一致,導致「在我機器上正常啊」之類的問題 - 應用搬遷、維護、擴展更容易 搬遷:構建一次image,可正常執行於任意平台 維護:image分層儲存技術,使image可以基於其他image,應用程式間相同的部分得以複用 假設我們在個人電腦寫了一個WEB,想要在伺服器上執行,那兩者必須使用相同的軟體(像是資料庫、服務器、函式庫),為了模擬相同的開發環境,我們使用Docker來執行。以執行應用程式來說,虛擬機器需要模擬出整套作業系統才能執行應用程式,而容器則是直接運行在宿主機上,而宿主機也可以是虛擬機器。比虛擬機器又更為輕量級、執行啟動又更快。 ### 架構圖 ![Container verse VM](https://i.imgur.com/gnlQGVa.png) ### 參考網址 [Docker 教學-1 架構及指令](https://mga8326.blogspot.com/2019/05/docker-1.html) [Docker 基本概念](https://tw.coderbridge.com/series/fa1b91903cf2495abd0034c823387a62/posts/0e37cfaab7c149bcbc0ed8df8b6cff67) <!-- -------------------------------------------------- --> Container 與 VM 的差別 --- - VM使用較大型的服務、而Container多使用於微服務中。 - Container彼此隔離,在同一台機器可以執行不同版本的服務,但VM會因版本不同造成環境衝突。 - VM - 優點: 安全性較高,因為硬體層以上都虛擬化 可以選擇各種不同的OS - 缺點: Image大小通常為GB 啟動速度通常要花個幾分鐘 資源使用較多,因為要將一部分資源分給VM的作業系統 - Container - 優點: Image大小通常為MB 啟動速度較快 能將更多資源運用在跑服務上 更新較為容易 - 缺點: 安全性較差 同一台機器中,每個Container的OS都是相同 ### 參考網址 [淺談Docker-虛擬機器和容器的差別](https://ithelp.ithome.com.tw/m/articles/10238498) <!-- -------------------------------------------------- -->