今日課程大綱


Environment Setup


大家在開發或寫作業的過程或許曾經遇過「我的電腦可以跑,為什麼你的不行?」(Works on my machine)的問題,為了避免這個問題,我們今天會安裝容器化平台 Docker。如果還沒有安裝 VS Code,可以先參考上學期的教材安裝。

Docker

什麼是 Docker

Docker 是一個開源的容器化平台,使用 Google 公司推出的 Go 語言實作,用於將應用程式和它需要的所有東西(程式碼、執行環境、系統工具、函式庫)打包在一起,確保在任何地方都能一樣地執行。每個容器都有自己的文件、環境變數和空間,但它們共享主機系統的操作核心。容器化的優點是非常高效且佔用資源少。

為什麼需要 Docker

Docker 最主要解決的是環境不一致導致的各種問題,例如在 A 的電腦上可以跑,但在 B 的電腦上卻一直報錯,這種情況下如果沒有 Docker 就需要解決系統不同(Windows/Mac)、安裝套件版本不同、需要設定環境變數⋯⋯等等的問題。

而 Docker 讓我們可以把需要的東西裝在容器裡,也就是把一個專案需要的所有東西打包在一起,而不是直接裝在 Windows/Mac 上,保證在任何電腦上都可以順利運作。可以用便當的概念來理解,打包之後就可以不用管在哪裡吃(哪台電腦),打開就是一樣的菜(一樣的環境),也不用擔心會因為地點不同而變質(不會因為電腦不同而出錯)。

<aside> <img src="/icons/chat_lightgray.svg" alt="/icons/chat_lightgray.svg" width="40px" />

我可以不用 Docker 嗎?

技術上可以,但就表示你需要自己安裝設定所有環境,並且安裝完的環境可能和別人不同,可能會讓之後助教不容易幫忙 debug,因此建議使用。

</aside>


上學期的第一堂課我們曾安裝虛擬機(Virtual Machine, VM),那時也希望解決類似的環境問題,那虛擬機和 Docker 的差別是什麼?虛擬機會模擬一整台完整的電腦,包含完整的作業系統,就像在你的電腦裡再建一台電腦,有自己的 Windows 或 Linux 系統。Docker 則是共用主機的作業系統核心,只打包應用程式和必要的函式庫,就像在同一個作業系統上開多個隔離的工作區。對我們這門課來說,Docker 輕量、快速的特點會更適合。

Docker 的優點

除了剛剛提到最主要的環境問題,Docker 還有其他的好處:

  1. 快速建立開發環境

    傳統開發時要建立好環境會需要一些時間安裝各種工具、套件、設定環境變數、確保環境變數⋯⋯,有 Docker 的情況下就可以非常快速地完成。

  2. 隔離性

    每個專案會在自己的 Container 裡,不會互相干擾、污染本機(安裝越來越多東西、各種不同版本的工具⋯⋯),不用了可以直接刪掉。

  3. 可移植性

    開發環境、測試環境、正式環境都使用同一個 Docker Image,確保程式在不同機器、不同平台上都能一致運行。