撰寫 Dockerfile
說明
Dockerfile 是一個基於文字的文件,用於建立容器映像檔。它向映像檔建構器提供關於要執行的指令、要複製的檔案、啟動指令等的指示。
例如,以下 Dockerfile 將產生一個可立即執行的 Python 應用程式
FROM python:3.12
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 通常遵循以下步驟
- 決定您的基礎映像檔
- 安裝應用程式依賴項
- 複製任何相關的原始程式碼和/或二進制檔案
- 設定最終映像檔
在本快速入門指南中,您將撰寫一個建構簡單 Node.js 應用程式的 Dockerfile。如果您不熟悉基於 JavaScript 的應用程式,請不要擔心。 這對於學習本指南並不是必要的。
設定
下載此 ZIP 檔案 並將內容解壓縮到您機器上的目錄中。
建立 Dockerfile
現在您已擁有專案,您就可以建立 Dockerfile
了。
下載並安裝 Docker Desktop。
在與檔案
package.json
相同的資料夾中建立一個名為Dockerfile
的檔案。Dockerfile 副檔名
需要注意的是,
Dockerfile
*沒有* 副檔名。某些編輯器會自動將副檔名新增到檔案(或抱怨它沒有副檔名)。在
Dockerfile
中,透過新增以下行來定義您的基礎映像檔FROM node:20-alpine
現在,使用
WORKDIR
指令定義工作目錄。這將指定未來指令將在哪裡執行以及檔案將複製到容器映像檔中的目錄。WORKDIR /app
使用
COPY
指令將機器上專案中的所有檔案複製到容器映像檔中COPY . .
使用
yarn
CLI 和套件管理器安裝應用程式的依賴項。 方法是使用RUN
指令執行指令RUN yarn install --production
最後,使用
CMD
指令指定要執行的預設指令CMD ["node", "./src/index.js"]
這樣,您應該擁有以下 Dockerfile
FROM node:20-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 並學習了基礎知識,接下來該學習如何建構、標記和推送映像檔了。