編寫 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 . .
使用
yarn
CLI 和包管理器安裝應用的依賴項。為此,請使用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 並學習了基礎知識,是時候瞭解如何構建、標記和推送映象了。
構建、標記和釋出映象