Try   HackMD

🛠️ 【軟體】必學的 Docker 🛠️

Docker 淺談

這篇是給完全不懂 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 的功能性類似早期的虛擬機,但性能大大超越。
(這裡不談 Docker 本身的技術)

我們將環境資訊寫在 Dockerfile 中,並根據其資訊構建出 Image。
Image 會根據 Dockerfile 去安裝依賴項和設定環境變數等。
Image 的執行單位是 Container,且一個 Image 能有多個 Container 實例。
所有的 Container 都是獨立執行的個體,與本機隔離。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

Docker 已經是軟體界的趨勢。
很多平台像是 NVidia、ROS2 等都會建議用 Docker 安裝環境。

  • 部署速度:下載 Docker Image >> 在本地安裝、編譯依賴項。
  • 安全性:Docker Container 是隔離於本地的,可放心做骯髒操作。
  • 開發便利性:不被版本相容性搞瘋,且能輕鬆使用別人寫好的環境。
  • 多元性:你可以在同時有多個 Image,運行各種不同的環境。