模擬機, 虛擬機, 容器, 應用環境閒聊

最近在練習使用 Docker 跟 LXC 建立 PHP + MariaDB 環境.

雖然聽說 Docker 一到兩年, 不過以前虛擬環境都是用 VirtualBox 跑 Windows 居多, Linux 大多是較舊的實體機直接上線.

到一年多前, 開始用 Proxmox VE , 在桌上型電腦裝常態性的虛擬機用. 這幾個月在公司用某台實體 Windows 電腦裝 XAMPP 寫一些監測程式, 想說監測也需要一些 SMTP 跟 SNMP 功能, 還是弄個 Linux 虛擬環境, 看到 Proxmox VE 有支援 Docker 跟 LXC , 就試試看.

而跟虛擬機不同的, 是虛擬的"層"不同:
模擬機: 是對於完全不同的 CPU 跟機械語言都能夠模擬, 例如在 x86 個人電腦執行模擬 6502 的 CPU , 然後在上面執行遊戲軟體.
虛擬機: 產生相近的 CPU 環境, 一般是特別指 x86 的 CPU , 在兩大業者分別支援 VT 跟 AMD-V 虛擬層級的功能後, 許多雲端業者也開始使用 VMware 賣虛擬機, 很多公司也逐漸將多台實體電腦縮減成 3 台(或多一點), 架成 Cluster , Server 都虛擬化了.
容器: 以前 Linux 就有 chroot , 建立沙盒(sandbox)來避免執行中的環境有問題, 而 Linux 核心(kernel)也把沙盒這個概念, 做成容器(Container)的方式, 只要一些管理程式, 就可以直接創造出一套相近的環境. 以電影來說, 就有點像 #奇異博士 的 #鏡中世界 .
應用環境: 和 LXC 是對 Linux 建立虛擬環境不同, 還有很多軟體有各自的虛擬應用, 例如: 虛擬站台(Virtual Host), 同一套軟體對不同業者提供不同功能, 靠登入帳號區隔等. 而在 Linux 環境, 許多軟體的設定檔, 都是用純文字格式, 所以把一些軟體的應用環境檔案整理好, 就可以快速部署成新的應用環境, 而 Docker 就是最普遍的專案, 建立一個 Docker 引擎, 把需要的檔案包裝整理起來. 而有不少 Linux 發行套件(distribution)或包含軟體的環境, 都有 Docker 版本, 只要下載現成的 Docker 檔案, 就可以很快做出一個應用環境, 甚至可以修改後, 再存成自己要用的 Docker 檔案.

大概的分層概念就是這樣, 而看到許多業者也把 Docker 列為預先提供的選項, 在想微軟要跟 Ubuntu 合作, 還提供了 .Net , MSSQL Linux 版, 大概也是想盡快搶進這個應用市場, 讓個人用戶習慣, 商業用就可以賣授權跟虛擬機, 也可以推廣單機版吧.