什麼是 Docker?非工程師也能懂的容器說明
Docker 是一種工具,可以把應用程式連同它執行所需的一切——正確的程式語言版本、函式庫、系統工具與設定——打包成一個標準單元,稱為容器(container)。容器在開發者的筆電、測試伺服器或雲端主機上都以相同的方式執行,因此解決了經典的「在我電腦上明明可以跑」的問題。建立容器的配方是一個簡短的文字檔,稱為 Dockerfile。
用 AI 開發時,為什麼 Docker 很重要
如果你的應用程式有後端——用 Python、Node、C# 或 Java 寫的 API——它就必須在安裝了正確軟體的環境中執行。Docker 是讓這件事可以重複進行最常見的方式。
- 部署後端。 包括 Mythex 在內的許多主機,都是透過 Dockerfile 建置容器來部署後端。在 Mythex 中,要求「一個 C# Web API」或「一個 Java 後端」,就會得到應用程式加上一個 Dockerfile,而發布時會建置映像檔並完成部署(API 後端)。
- 離開某個平台。 如果你匯出了 AI 開發的應用程式,Dockerfile 會讓它更容易在另一個主機上執行。請參閱如何匯出並自行架設 AI 開發的應用程式。
- 與開發者合作。 加入你專案的開發者,只需一兩個指令就能啟動整個應用程式,而不必花一天時間安裝各種東西。
日常生活的比喻:貨運貨櫃
在標準貨櫃出現之前,貨物是一件一件裝載的——麻袋、桶子、木箱——而每個港口的處理方式都不同。標準的鋼製貨櫃改變了這一切:貨物只要裝箱一次,任何船隻、起重機、火車或卡車都能搬運,而不必管裡面裝的是什麼。
Docker 對軟體做的正是同樣的事:
- Dockerfile 就是裝箱清單與操作說明。
- 映像檔就是封裝好的貨櫃。
- 執行中的容器就是那個貨櫃被拿去工作——在這裡,就是一台伺服器。
- Docker Engine 就是起重機與船:伺服器上知道如何執行任何容器的軟體。
Docker 如何運作
| 組成 | 說明 |
|---|---|
| Dockerfile | 一個文字檔,內含建置映像檔的逐步指令。 |
| 映像檔(Image) | 唯讀的封裝:作業系統基礎、執行環境、函式庫與你的程式碼。 |
| 容器(Container) | 映像檔的執行實例,與同一台機器上的其他應用程式隔離。 |
| 登錄庫(Registry) | 儲存與分享映像檔的地方,例如 Docker Hub 或雲端服務商的登錄庫。 |
| Docker Engine | 在背景執行、負責建置映像檔並執行容器的服務。免費且開放原始碼。 |
| Docker Desktop | 適用於 Mac、Windows 與 Linux 的應用程式,將引擎與圖形化介面打包在一起。 |
容器與虛擬機器的比較:虛擬機器假裝自己是一台完整獨立的電腦,擁有自己的作業系統,因此很笨重,啟動也慢。容器則共用主機的作業系統核心,只隔離應用程式與它的檔案,因此通常幾秒內就能啟動,而且占用的記憶體少得多。同一台伺服器上可以並行執行許多容器。
實例:一個小型 Python API
假設你的 AI 建構工具為一個預約應用程式建立了 Python FastAPI 後端。它的 Dockerfile 可能長這樣:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
逐行說明:
| 指令 | 作用 |
|---|---|
FROM python:3.12-slim | 從已安裝 Python 3.12 的官方映像檔開始。 |
WORKDIR /app | 在容器內的 /app 資料夾中工作。 |
COPY requirements.txt . 與 RUN pip install ... | 複製函式庫清單並安裝這些函式庫。 |
COPY . . | 複製應用程式自己的程式碼進來。 |
EXPOSE 8000 | 標明應用程式監聽的是 8000 埠。 |
CMD [...] | 容器執行時啟動網路伺服器的指令。 |
白話來說:「從 Python 3.12 開始。安裝 requirements.txt 中列出的函式庫。複製程式碼進來。在 8000 埠啟動網路伺服器。」
接著開發者(或代管平台)會執行兩個指令:
docker build -t booking-api .
docker run -p 8000:8000 booking-api
第一個指令會建置映像檔,並命名為 booking-api。第二個指令則啟動一個容器,並把主機上的 8000 埠連接到容器內的 8000 埠。API 現在已經在執行了——而且在任何安裝了 Docker 的伺服器上,都會以同樣的方式運作。
注意映像檔中沒有包含什麼:密碼與 API 金鑰。這些會在容器啟動時以環境變數的形式傳入,因此同一個映像檔可以在測試與正式環境中,使用不同的設定執行。
關鍵名詞
| 名詞 | 意義 |
|---|---|
| 容器(Container) | 應用程式及其相依套件的隔離、執行中封裝。 |
| 映像檔(Image) | 用來啟動容器的範本。 |
| 基礎映像檔(Base image) | Dockerfile 中 FROM 那一行的起點,例如 python:3.12-slim 或 node:22。 |
| 層(Layer) | Dockerfile 的每個步驟都會新增一層快取,讓重新建置更快。 |
| 埠映射(Port mapping) | 把主機上的埠連接到容器內部的埠。 |
| 磁碟區(Volume) | 在容器被替換後仍會保留的儲存空間。容器本身是可以隨時丟棄的。 |
| Docker Compose | 描述多個同時執行的容器的檔案,例如一個 API 加上一個資料庫。 |
| Kubernetes | 在許多台伺服器上執行大量容器的系統。大多數小型應用程式不需要它。 |
常見的誤解
- 「Docker 就是虛擬機器。」 它更輕量:容器共用主機的核心。
- 「容器內儲存的資料很安全。」 容器本來就是設計成可以丟棄、替換的。任何必須長久保存的東西——使用者資料、上傳的檔案——都應該放在資料庫、檔案儲存空間或磁碟區中。
- 「把機密放進 Dockerfile 沒關係,因為它是私人的。」 映像檔會被分享,也會被推送到登錄庫。機密應該在執行時再傳入。
- 「Docker 能讓應用程式變安全。」 隔離有幫助,但一個執行過時軟體、設定又很薄弱的容器,仍然很容易受攻擊。
- 「每個應用程式都需要 Docker。」 靜態網站或簡單的前端通常只會以純檔案的形式代管,完全不需要容器。
- 「Docker Desktop 對每個人都免費。」 引擎是免費的;但根據 Docker 的條款,規模較大的公司使用 Docker Desktop 需要付費訂閱。
該向你的 AI 建構工具要求什麼
- 「這個應用程式需要 Dockerfile 嗎?如果需要,請用白話解釋每一行。」
- 「使用小型的官方基礎映像檔,並固定語言版本。」
- 「讓機密不進入映像檔中,改在執行時從環境變數讀取。」
- 「確保上傳的檔案與資料都存放在資料庫或檔案儲存空間中,而不是容器內部。」
- 「加入 Docker Compose 檔案,讓開發者只要一個指令就能在本機執行前端、API 與資料庫。」
- 「加入健康檢查端點,讓主機能判斷 API 是否正常運作。」
Mythex 中的 Docker
使用 Mythex 不需要安裝或執行 Docker。你的專案會在私人雲端沙盒中執行;當你要求一個需要容器的後端——例如 C#、Java,或自訂的 Node 或 Python 服務——Mythex 會撰寫應用程式與 Dockerfile,在沙盒中預覽,並在你發布時部署,無須自行設定任何主機(技術如何選擇)。在 Pro 方案中,你可以匯出專案或同步到 GitHub,並帶走 Dockerfile。若想了解後端與前端如何搭配,請參閱前端與後端的差別。
常見問題
用簡單的話說,什麼是 Docker?
Docker 是一種工具,可以把應用程式連同它執行所需的一切——程式語言執行環境、函式庫與設定——打包成一個標準單元,稱為容器。這個容器在筆電、測試伺服器或雲端主機上都以相同方式執行。
Docker 映像檔和容器有什麼不同?
映像檔是打包好的唯讀範本:應用程式及其相依套件,依照 Dockerfile 建置而成。容器則是該映像檔正在執行的副本。同一個映像檔可以啟動多個容器。
Docker 就是虛擬機器嗎?
不是。虛擬機器會模擬一台完整的電腦,擁有自己的作業系統。容器則共用主機的作業系統核心,只隔離應用程式本身,因此啟動更快,也占用較少的記憶體。
Docker 是免費的嗎?
Docker Engine 是執行容器的核心,免費且開放原始碼。根據 Docker 在 2026 年 9 月的條款,Docker Desktop 對於非商業開放原始碼專案,以及員工少於 250 人且年營收低於 1,000 萬美元的公司是免費的;規模更大的公司則需要付費訂閱。
用 AI 建構應用程式需要學 Docker 嗎?
通常不需要。許多 AI 建構工具會替你處理容器。了解 Dockerfile 是什麼,有助於你理解後端是如何打包的,也方便你在匯出應用程式後,將它執行或架設在其他地方。