編寫 Dockerfile
說明
Dockerfile 是一種基於文字的檔案,用於建立容器映像檔。它為映像檔建置器提供指令,包含要執行的命令、要複製的檔案、啟動命令等等。
舉例來說,以下 Dockerfile 將產生一個可立即執行的 Python 應用程式
FROM python:3.13
WORKDIR /usr/local/app
# Install the application dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Copy in the source code
COPY src ./src
EXPOSE 5000
# Setup an app user so the container doesn't run as the root user
RUN useradd app
USER app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]常用指令
Dockerfile 中最常見的一些指令包括
FROM <image>- 指定建置將會擴充的基礎映像檔。WORKDIR <path>- 指定「工作目錄」,即映像檔中將會複製檔案及執行指令的路徑。COPY <host-path> <image-path>- 告訴建置器將檔案從主機複製到容器映像檔中。RUN <command>- 告訴建置器執行指定的命令。ENV <name> <value>- 設定執行中的容器將使用的環境變數。EXPOSE <port-number>- 在映像檔上設定配置,指出該映像檔想要公開的通訊埠。USER <user-or-uid>- 為後續的所有指令設定預設使用者。CMD ["<command>", "<arg1>"]- 設定使用此映像檔的容器啟動時執行的預設命令。
若要閱讀所有指令或深入了解,請查看 Dockerfile 參考文件。
試試看
正如您在上一個範例中看到的,Dockerfile 通常遵循以下步驟
- 確定您的基礎映像檔
- 安裝應用程式相依性
- 複製任何相關的原始程式碼及/或二進位檔
- 配置最終的映像檔
在本快速實作指南中,您將編寫一個 Dockerfile 來建置一個簡單的 Node.js 應用程式。如果您不熟悉基於 JavaScript 的應用程式,請別擔心,這對於跟隨本指南並非必要。
設定
下載此 ZIP 檔案 並將內容解壓縮到您機器上的資料夾中。
如果您不想下載 ZIP 檔案,也可以複製 https://github.com/docker/getting-started-todo-app 專案並切換到 build-image-from-scratch 分支。
建立 Dockerfile
現在您已經有了專案,準備好建立 Dockerfile 了。
下載並安裝 Docker Desktop。
在與
package.json檔案相同的資料夾中,建立一個名為Dockerfile的檔案。Dockerfile 檔案副檔名
請注意,
Dockerfile沒有任何副檔名。有些編輯器會自動為該檔案新增副檔名(或因為沒有副檔名而發出警告)。在
Dockerfile中,透過新增以下行來定義您的基礎映像檔FROM node:22-alpine現在,使用
WORKDIR指令定義工作目錄。這將指定未來指令執行的位置,以及檔案將被複製到容器映像檔內的位置。WORKDIR /app使用
COPY指令將您機器上專案的所有檔案複製到容器映像檔中COPY . .使用
yarnCLI 和套件管理器安裝應用程式的相依性。為此,請使用RUN指令執行命令RUN yarn install --production最後,使用
CMD指令指定要執行的預設命令CMD ["node", "./src/index.js"]這樣,您應該就會得到以下 Dockerfile
FROM node:22-alpine WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "./src/index.js"]
此 Dockerfile 尚未達到生產環境標準
請注意,此 Dockerfile 尚未(刻意地)遵循所有最佳實踐。它雖然能建置應用程式,但建置速度可能不夠快,映像檔也不夠安全。
繼續閱讀以了解如何讓映像檔最大化利用建置快取、以非 root 使用者身分執行,以及多階段建置。
使用
docker init快速將新專案容器化
docker init命令將分析您的專案並快速建立 Dockerfile、compose.yaml和.dockerignore,幫助您快速上手。由於您在此處專門學習 Dockerfile,因此暫時不會使用它。但您可以在此處深入了解。
其他資源
若要了解更多關於撰寫 Dockerfile 的資訊,請造訪以下資源
下一步
現在您已經建立了 Dockerfile 並學習了基礎知識,是時候學習如何建置、標記 (tag) 及推送映像檔了。
建置、標記並發布映像檔