指南

什麼是 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 是什麼,有助於你理解後端是如何打包的,也方便你在匯出應用程式後,將它執行或架設在其他地方。

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 简体中文 繁體中文(香港)