點燈坊

失くすものさえない今が強くなるチャンスよ

Docker 基本觀念與原理介紹

Sam Xiao's Avatar 2021-10-30

Docker 算是近年來 Developer 與 DevOps 圈的大事,它改變了 Developer 的開發方式,也改變了 DevOps 佈署方式。

Architecture

Virtual Machine

overview000

透過 hypervisor 在一個 host os 上執行眾多 guest os。

Docker Container

overview001

透過 Docker 在一個 host os 上執行執行眾多 app。

可以發現 Docker 與 VM 最大差異在於 Docker 不需執行 guest os,因此速度比 VM 快很多,也更節省 resource

Why Docker ?

Q : Docker 都是 DevOps 圈在推的,跟 developer 有什麼關係 ?

Docker 的確是 DevOps 圈在推的,但事實上 Docker 對於開發有很多優點 :

  • Server 跑的是 Linux

    macOS 與 Windows 基本上都屬於 client 端 OS,有大量的工具加速開發,硬體 driver 支援完整穩定,macOS 只是比較接近 Linux,一些 Linux 的 service 較容易移植到 macOS 而已,但本質上 macOS 與 Linux 仍然是不同的。

    所以無論在 macOS 或 Windows 開發,最後還是要在 Linux 上執行,最常見的問題就是 :

    我在本機測試都沒問題,但上 Linux 就掛了

    主要的原因就是 Linux 上的環境與 macOS 與 Windows 不同,因此在開發時,你無法發現這個錯誤。

    若開發環境能使用與 server 完全相同的 Linux 環境,問題就解決了,不過 Linux 對硬體及開發環境比較不友善,不適合當 client 端 OS,因此在 macOS 或 Windows 可以透過 Docker 虛擬出 Linux 環境,讓開發與上線環境相同。

  • Server 安裝設定複雜

    以前都必須手動安裝設定 server,假如只有一台 server 還好,但若有上百台以上 server 需要設定時,這將是個苦差事。

    目前各大 server 官方都會提供 Docker image,只需以 文字檔 描述設定所需 server,就可以 疊積木 方式,快速將上百台以上 server 設定好。

    一些 server,如 NginxPostgreSQLRedis…等安裝並沒有想像中簡單,developer 光設定環境就要花很多時間,但打包成 Docker 後,其他人可快速建立環境。

  • Docker 速度快且省電
    之前為了在 macOS 或 Windows 使用 Linux,最流行的就是 Vagrant,這是一個完全 VM 的技術,但它也有不少缺點 :

    • 記憶體 : 需 2GB 以上記憶體
    • CPU : 只能有 50% ~ 70% 的 CPU 速度
    • 耗電 : Macbook Pro Retina 15” 若使用 VM,大約只剩下 3 hr 的電力

    但 Docker 完全沒有這些問題,用起來感覺跟原生 macOS 或 Windows App 一樣省電。

Docker Desktop for Mac

overview002

在 macOS 上只需安裝 Docker Desktop for macOS 即可,同時包含薄薄一層 Linux 與 Docker 角色。

Docker Desktop for Windows

overview003

在 Windows 10 Pro 要透過 Hyper-V 提供 hypervisor 功能,Docker Desktop for Windows 則包含薄薄一層 Linux 與 Docker 角色。

Q : Docker 在 Windows 與 macOS 還是需要 Linux VM,既然都是 VM 技術,那還是一樣慢 ?

Docker 目前的確是要透過 Linux kernel 才能執行,因此 Windows 仍然需要透過 Hyper-V 或 VirtualBox 才能跑 Docker,但 Docker engine 是一層很薄的 Linux,並不是如 Vagrant 裝的是一整套 Linux,因此很省記憶體,對 CPU 耗損也不大,重點的是還非常省電。

Conclusion

  • Docker 有別於 VM,是以 application 形式執行;而 VM 是以 guest os 形式執行
  • 也因為 Docker 不需 guest os,所以執行速度快,CPU 耗損也小,還很節省 resource