首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

部署與DevOps

虛擬化技術介紹

By Kurau·2023-02-09·Updated 2026-05-09·7 分鐘閱讀

虛擬化技術介紹(VM vs Container)

TL;DR
虛擬化要解決的核心問題:「我寫的程式在我的電腦能跑,搬你電腦就爆掉」。兩大技術:Virtual Machine(系統層,模擬整個 OS,啟動慢但隔離強)、Container(OS 層,共用 host kernel,啟動快但隔離較弱)。Container 是現代主流,Docker 是事實標準。
主要參考
Docker 基礎教學與介紹 101 — cwhu

為什麼需要虛擬化

環境一致性問題:

我的電腦                    你的電腦
- macOS 14.0                - Windows 11
- Node 20.x                 - Node 18.x
- Python 3.12               - Python 3.10
- libssl 3.0                - libssl 1.1
- ...                       - ...

我的程式可以跑              你的電腦會炸 ❌

虛擬化的目標:把「執行環境」打包成 獨立、可移動、跨硬體相同行為 的單元。

兩種主流方法:

  • Virtual Machine(虛擬機器):模擬 整個作業系統
  • Container(容器):共用 host OS,只 隔離應用層

Virtual Machine(VM)— 以作業系統為中心

工作原理

┌────────────────────────────────────────┐
│           Application                   │
├────────────────────────────────────────┤
│           Bins / Libs                   │
├────────────────────────────────────────┤
│           Guest OS                      │  ← 完整另一個 OS
├────────────────────────────────────────┤
│        Hypervisor (VirtualBox /         │  ← 虛擬化層
│        VMware / KVM / Hyper-V)          │
├────────────────────────────────────────┤
│           Host OS                       │
├────────────────────────────────────────┤
│           Hardware                      │
└────────────────────────────────────────┘

Hypervisor(管理程式):

  • 在 Host OS 上 模擬硬體,讓 Guest OS 以為自己跑在獨立電腦上
  • 多個 VM 可以同時跑,互不打架

代表:VirtualBox / VMware / KVM / Hyper-V

優缺點

✅ 優點❌ 缺點
完全隔離(各 VM 獨立 OS)啟動慢(秒-分鐘級)
可跑 不同 OS(Linux on Mac / Windows on Linux)吃資源(每個 VM 都要 GB 級記憶體)
安全性最高硬碟空間大(整個 OS 副本)
Hardware abstraction啟動 / 部署複雜

Container — 以應用程式為中心

工作原理

┌────────────────────────────────────────┐
│  Container 1   Container 2   Container 3│
│  App + Libs    App + Libs    App + Libs │  ← 各自獨立
├────────────────────────────────────────┤
│  Container Manager (Docker / containerd)│  ← 隔離管理
├────────────────────────────────────────┤
│           Host OS Kernel                │  ← ⭐ 共用!
├────────────────────────────────────────┤
│           Hardware                      │
└────────────────────────────────────────┘

關鍵差異:Container 共用 Host OS Kernel,不需要裝 Guest OS。

隔離機制:

  • Namespace(隔離 process / network / mount / user)
  • Cgroups(限制 CPU / memory / disk I/O)

代表:Docker / Podman / containerd

優缺點

✅ 優點❌ 缺點
啟動超快(秒級,通常 <1s)共用 kernel,一個破壞影響全部
省資源(MB 級記憶體)隔離性比 VM 弱
小硬碟空間(沒 Guest OS)主要支援 Linux containers(Windows 較複雜)
部署簡單(Docker image)安全 boundary 比 VM 弱

VM vs Container 完整對比

維度Virtual MachineContainer
抽象層次系統層(OS 級)應用層
啟動速度秒-分鐘毫秒-秒
資源占用GB 級MB 級
硬碟空間數 GB(含整個 OS)數十 MB(只 app + libs)
Guest OS需要不需要(共用 host)
隔離強度⭐⭐⭐⭐⭐ 強⭐⭐⭐
密度(同主機可跑幾個)低(10-30)高(100+)
用途跑不同 OS / 強隔離Microservices / CI/CD
代表VirtualBox / VMwareDocker / Kubernetes

實務上常常混合用

雲服務(AWS / GCP / Azure)的真實架構:

Host Hardware
    └─ Hypervisor (KVM / Xen)
        ├─ VM 1
        │   ├─ Container 1 (app A)
        │   ├─ Container 2 (app B)
        │   └─ Container 3 (app C)
        ├─ VM 2
        │   ├─ Container 4
        │   └─ Container 5
        └─ ...

為什麼這樣:

  • VM 提供 租戶間隔離(不同公司的資料絕對不互相影響)
  • Container 提供 應用間靈活打包

Cloud serverless 也是這個原理:Lambda / Cloud Run 底層是 micro VM(Firecracker)+ container。


Docker 基礎(Container 主流)

核心概念

概念比喻
Dockerfile食譜(怎麼做)
Image半成品冷凍食品(可分享、可堆疊)
Container成品熱食(image 跑起來的實例)
Volume外接硬碟(持久化資料)
Network容器間怎麼通訊

最簡單的 Dockerfile

FROM node:20-alpine          # 基底 image
WORKDIR /app                 # 工作目錄
COPY package*.json ./
RUN npm ci                    # 安裝依賴
COPY . .
RUN npm run build
EXPOSE 3000                   # 對外 port
CMD ["npm", "start"]          # 啟動命令
dockerfile
docker build -t my-app .
docker run -p 3000:3000 my-app
bash

docker-compose(多 container 編排)

# docker-compose.yml
services:
  web:
    build: .
    ports: ["3000:3000"]
    depends_on: [db]
    environment:
      DATABASE_URL: postgresql://user:pass@db:5432/mydb

  db:
    image: postgres:16
    volumes: ["pgdata:/var/lib/postgresql/data"]
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb

volumes:
  pgdata:
yaml
docker-compose up               # 啟動全部
docker-compose down -v          # 停止 + 清 volume
bash

2026 年 Container 生態

工具用途
Docker事實標準,個人 / 開發
PodmanDocker 替代,daemonless
containerd / runc底層 runtime
Kubernetes (K8s)生產級編排(多機 cluster)
Docker Compose單機多 container
Buildah純 build image,no daemon
SkaffoldK8s dev 流程

何時用 Container vs VM

用 Container
  • Microservice 架構
  • CI/CD pipeline(快速 spawn / destroy)
  • dev/staging/prod 環境一致
  • Serverless 後端(底層多半是 container)
用 VM
  • 跑非 Linux OS(Windows on Mac)
  • 強安全 / 強隔離 需求(銀行 / 政府)
  • 老 legacy 系統,只能 OS-level 包
  • Kernel-level 操作(driver 開發 / OS 學習)

進一步學習路徑

1. 看完本篇(VM vs Container 概念)✅
2. 上手 Docker(寫 Dockerfile + docker run)
3. docker-compose(多服務)
4. CI/CD 整合(GitHub Actions build image)
5. Kubernetes 基礎(Pod / Deployment / Service)
6. 雲端 K8s(EKS / GKE / AKS)
7. Helm / Kustomize(部署模板化)
8. Service Mesh(Istio / Linkerd)— 進階
個人推薦資源
  • Docker Curriculum — 從 0 到能用
  • Kubernetes the Hard Way — 深入了解 K8s 原理
  • Play with Docker — 線上 sandbox

目錄

    ◆ 相關文章

    • React專案無法正常Github Action

      2026-05-09
    • 如何找到你的ip與local

      2026-05-09
    • 如何布置靜態網站 (免費資源) ⇒ Next.js

      2026-05-09
    • 免費伺服器 介紹

      2026-05-09
    ← 上一篇網頁縮圖 - SEO下一篇 →個人網站怎麼選資料庫 (關聯 非關聯)

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章