這篇是給完全不懂 Docker 用途的人看的。
在開發軟體時,環境常常是最容易把人搞瘋的。
這裡環境指的可以是硬體架構(x86、ARM),可以是作業系統(Linux、Windows),
也可以是 Python 版本,也可以是安裝的依賴包們。
例如使用 Lambda 語法的 .cpp 檔案,C++11
編譯器可以識別但 C++ 98/03
就不行。
那為了確保在其他機台能順利運作,我們就必須確認機器上都有安裝較新版的編譯器。
但實際上,你可能會先遇到編譯器和前版本打架、無法安裝新編譯器、
電腦不支援新版編譯器等等你根本沒想過會卡住的問題。
而 Docker 正是來解決環境問題的救星。
假設今天你想玩 ROS2 Humble,
那你須要準備一台灌 Ubuntu 22.04 OS 的電腦。
接著照做參考官網的ROS2安裝步驟。
撇除汙染原本環境、可能安裝失敗問題,
安裝過程本身就很繁瑣和耗時。
相反地,Docker 一個指令就結束了:
docker image pull osrf/ros:humble-desktop-full
而且可在 Windows 、不同 distro 的 Ubuntu 上操作。
Docker 的功能性類似早期的虛擬機,但性能大大超越。
(這裡不談 Docker 本身的技術)
我們將環境資訊寫在 Dockerfile
中,並根據其資訊構建出 Image。
Image 會根據 Dockerfile
去安裝依賴項和設定環境變數等。
Image 的執行單位是 Container,且一個 Image 能有多個 Container 實例。
所有的 Container 都是獨立執行的個體,與本機隔離。
Docker 已經是軟體界的趨勢。
很多平台像是 NVidia、ROS2 等都會建議用 Docker 安裝環境。