# 專題筆記: VM 與 Docker
###### tags: `專題` ( 09/22 - 09/28, 2022 )
<!-- -------------------------------------------------- -->
VM (虛擬機器)
---
### VM 是什麼
用來建立虛擬化運算環境的技術(OS層級虛擬化),也是第一代雲端運算的基礎。
### VM 的用途
- 試用新的作業系統。
- 建置應用程式並將其部署到雲端。
- 啟動新的環境,讓開發人員能夠更輕鬆快速地執行開發/測試案例。
虛擬機器無法與實體電腦直接互動,而是需要藉助一個叫做虛擬機器監視器(Hypervisor)的輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調。
註解:
- Hypervisor 負責將實體運算資源(例如處理器、記憶體、儲存設備)配置給每個虛擬機器
- Host OS 是電腦上的OS
- Guest OS 是指安裝在VM的OS
### 架構圖

### 參考網址
[虛擬機器 (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來執行。以執行應用程式來說,虛擬機器需要模擬出整套作業系統才能執行應用程式,而容器則是直接運行在宿主機上,而宿主機也可以是虛擬機器。比虛擬機器又更為輕量級、執行啟動又更快。
### 架構圖

### 參考網址
[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)
<!-- -------------------------------------------------- -->