Try   HackMD

專題筆記: VM 與 Docker

tags: 專題 ( 09/22 - 09/28, 2022 )

VM (虛擬機器)

VM 是什麼

用來建立虛擬化運算環境的技術(OS層級虛擬化),也是第一代雲端運算的基礎。

VM 的用途

  • 試用新的作業系統。
  • 建置應用程式並將其部署到雲端。
  • 啟動新的環境,讓開發人員能夠更輕鬆快速地執行開發/測試案例。

虛擬機器無法與實體電腦直接互動,而是需要藉助一個叫做虛擬機器監視器(Hypervisor)的輕量型軟體層,在虛擬機器和底層的實體硬體之間進行協調。

​​​​註解:
​​​​
​​​​- Hypervisor 負責將實體運算資源(例如處理器、記憶體、儲存設備)配置給每個虛擬機器
​​​​- Host OS 是電腦上的OS
​​​​- Guest OS 是指安裝在VM的OS

架構圖

VM架構圖

參考網址

虛擬機器 (VM)
什麼是虛擬機器 (VM)?

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

參考網址

Docker 教學-1 架構及指令
Docker 基本概念

Container 與 VM 的差別

​​​​- VM使用較大型的服務、而Container多使用於微服務中。
​​​​- Container彼此隔離,在同一台機器可以執行不同版本的服務,但VM會因版本不同造成環境衝突。
  • VM

    • 優點:
      安全性較高,因為硬體層以上都虛擬化
      可以選擇各種不同的OS
    • 缺點:
      Image大小通常為GB
      啟動速度通常要花個幾分鐘
      資源使用較多,因為要將一部分資源分給VM的作業系統
  • Container

    • 優點:
      Image大小通常為MB
      啟動速度較快
      能將更多資源運用在跑服務上
      更新較為容易
    • 缺點:
      安全性較差
      同一台機器中,每個Container的OS都是相同

參考網址

淺談Docker-虛擬機器和容器的差別