什麼是 Docker?應用程式開發者的容器簡單解說
Docker 是一款工具,把 App 連同運行所需的一切——正確的語言版本、程式庫、系統工具及設定——打包成稱為**容器(container)**的標準單位。容器在開發者的手提電腦、測試伺服器或雲端主機上的運行方式都相同,從而解決了經典的「在我的機器上明明可以運作」問題。建置容器的食譜是一個簡短的文字檔,稱為 Dockerfile。
用 AI 做 App 時,Docker 為何重要
如果你的 App 有後端——例如用 Python、Node、C# 或 Java 編寫的 API——它就必須在安裝了正確軟件的環境中運行。Docker 是令這個過程可以重複進行的最常見方法。
- 部署後端。 包括 Mythex 在內的許多主機,都是透過從 Dockerfile 建立容器來部署後端。在 Mythex 中,要求「一個 C# Web API」或「一個 Java 後端」,會得到 App 加上一個 Dockerfile,而發布時會建置映像檔並完成部署(API 後端)。
- 離開平台。 如果你匯出了 AI 生成的 App,Dockerfile 會令它更容易在其他主機上運行。參閱如何匯出並自行託管 AI 生成的 App。
- 與開發者合作。 加入你項目的開發者,只需一兩個指令即可啟動整個 App,而不必花一整天安裝各種東西。
日常比喻:貨運貨櫃
在標準化的貨運貨櫃出現之前,貨物是逐件裝卸的——麻包、木桶、木箱——每個港口處理方式都不一樣。標準化的鋼製貨櫃改變了這一切:裝箱一次,任何船隻、起重機、火車或貨車都能搬運,而無需理會箱內是什麼。
Docker 對軟件所做的正是同一件事:
- Dockerfile 就像裝箱清單與指示。
- 映像檔(image) 就是封好、已裝箱的貨櫃。
- 運行中的容器 就是那個貨櫃投入運作,在這裡是一部伺服器。
- Docker Engine 則是起重機和貨船:伺服器上知道如何運行任何容器的軟件。
Docker 如何運作
| 組成部分 | 是什麼 |
|---|---|
| Dockerfile | 一個文字檔,載有建置映像檔的逐步指示。 |
| 映像檔(Image) | 唯讀的套件:作業系統基礎、運行環境、程式庫及你的程式碼。 |
| 容器(Container) | 映像檔的運行實例,與同一部機器上的其他 App 互相隔離。 |
| 登錄處(Registry) | 儲存及分享映像檔的地方,例如 Docker Hub 或雲端供應商的登錄處。 |
| Docker Engine | 在背景運行、負責建置映像檔及運行容器的服務。免費及開源。 |
| Docker Desktop | 適用於 Mac、Windows 及 Linux 的應用程式,把引擎與圖形介面打包在一起。 |
容器與虛擬機的分別:虛擬機會假裝自己是一部獨立的完整電腦,擁有自己的作業系統,因此體積龐大,啟動也慢。容器則共用主機的作業系統核心,只隔離 App 及其檔案,因此通常在數秒內便可啟動,所佔記憶體也少得多。許多容器可以在同一部伺服器上並排運行。
實例:一個小型 Python API
假設你的 AI 生成工具為一個預約 App 建立了 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 . . | 複製 App 本身的程式碼。 |
EXPOSE 8000 | 註明 App 監聽的是 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) | 一個與其他程式互相隔離、正在運行的 App 及其依賴項目的封裝。 |
| 映像檔(Image) | 用來啟動容器的範本。 |
| 基礎映像檔(Base image) | Dockerfile 中 FROM 一行的起點,例如 python:3.12-slim 或 node:22。 |
| 層(Layer) | Dockerfile 的每個步驟都會增加一層快取層,令重新建置更快。 |
| 埠映射(Port mapping) | 把主機上的埠連接到容器內的埠。 |
| 磁碟區(Volume) | 在容器被替換後仍會保留的儲存空間。容器本身是可以丟棄的。 |
| Docker Compose | 一個描述多個容器一同運行的檔案,例如 API 加資料庫。 |
| Kubernetes | 在多部伺服器上運行大量容器的系統。大多數小型 App 並不需要它。 |
常見誤解
- 「Docker 就是虛擬機。」 它更輕巧:容器共用主機的核心。
- 「容器內儲存的資料是安全的。」 容器本來就是設計成可以丟棄及替換的。任何必須保留的東西——用戶資料、上載的檔案——都應放在資料庫、檔案儲存或磁碟區中。
- 「把密鑰放在 Dockerfile 中沒問題,因為它是私人的。」 映像檔會被分享,並推送到登錄處。應在運行時傳入密鑰。
- 「Docker 能令 App 變得安全。」 隔離有幫助,但運行過時軟件、設定薄弱的容器,仍然容易受攻擊。
- 「每個 App 都需要 Docker。」 靜態網站或簡單的前端通常以純檔案形式託管,完全不需要容器。
- 「Docker Desktop 對所有人都免費。」 引擎是免費的;根據 Docker 的條款,規模較大的公司使用 Docker Desktop 需要付費訂閱。
可以問你的 AI 生成工具的問題
- 「這個 App 需要 Dockerfile 嗎?如需要,請用平實的語言解釋每一行。」
- 「使用小型的官方基礎映像檔,並固定語言版本。」
- 「不要把密鑰放進映像檔,改為在運行時從環境變數讀取。」
- 「確保上載的檔案及資料儲存在資料庫或檔案儲存中,而不是容器內。」
- 「加入 Docker Compose 檔案,讓開發者只需一個指令,即可在本機運行前端、API 及資料庫。」
- 「加入健康檢查端點,讓主機能判斷 API 是否正常運行。」
Mythex 中的 Docker
使用 Mythex 不需要安裝或運行 Docker。你的專案運行於私人雲端沙盒中。當你要求一個需要容器的後端——例如 C#、Java,或自訂的 Node 或 Python 服務——Mythex 會撰寫 App 加上一個 Dockerfile,在沙盒中預覽,並在你發布時部署,無需自行設定主機(技術如何選定)。在 Pro 方案中,你可以匯出專案,或同步到 GitHub,把 Dockerfile 一併帶走。關於後端與前端如何配合,請參閱前端與後端。
常見問題
簡單來說,什麼是 Docker?
Docker 是一款工具,把 App 連同運行所需的一切(語言運行環境、程式庫及設定)打包成稱為「容器」的標準單位。容器在手提電腦、測試伺服器或雲端主機上的運行方式都相同。
Docker 映像檔與容器有什麼分別?
映像檔是已打包、唯讀的範本:由 Dockerfile 建成的 App 及其依賴項目。容器則是該映像檔的運行中副本。同一個映像檔可以啟動多個容器。
Docker 是虛擬機嗎?
不是。虛擬機會模擬一部完整的電腦,並附有自己的作業系統。容器則共用主機的作業系統核心,只隔離 App 本身,因此啟動較快,佔用的記憶體也較少。
Docker 是免費的嗎?
Docker Engine 是運行容器的核心,屬免費及開源。根據 Docker 於 2026 年 9 月的條款,Docker Desktop 對非商業開源項目,以及員工少於 250 人、年收入少於 1,000 萬美元的公司均免費;規模更大的公司則需要付費訂閱。
用 AI 做 App 需要學懂 Docker 嗎?
通常不需要。很多 AI 生成工具都會替你處理容器。但知道 Dockerfile 是什麼,有助你理解後端如何被打包,並在匯出 App 後可以把它運行於其他主機。