指南

什麼是 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 後可以把它運行於其他主機。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)