博客 / 詳情

返回

華納雲:編寫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"]](http://www.hncloud.com)
常用指令
一些最常見的指令包括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 通常遵循以下步驟:

確定基礎映像Determine your base image
安裝應用程序依賴項
複製任何相關的源代碼和/或二進制文件
配置最終圖像
在本快速上手指南中,您將編寫一個 Dockerfile 來構建一個簡單的 Node.js 應用程序。如果您不熟悉基於 JavaScript 的應用程序,請不要擔心。這對於遵循本指南來説不是必需的。

設置
下載此 ZIP 文件並將內容提取到您機器上的目錄中。

創建Dockerfile
現在您有了項目,您就可以創建了Dockerfile。

下載並安裝Docker Desktop。

Dockerfile在與該文件相同的文件夾中創建一個名為的文件package.json。

Dockerfile 文件擴展名

需要注意的是,沒有Dockerfile文件擴展名。有些編輯器會自動為文件添加擴展名(或抱怨沒有擴展名)。

在中Dockerfile,通過添加以下行來定義您的基礎圖像:

FROM node:20-alpine
現在,使用WORKDIR指令定義工作目錄。這將指定將來的命令將在何處運行,並且目錄文件將在容器映像內複製。

WORKDIR /app
使用以下指令將計算機上項目的所有文件複製到容器映像中COPY:

COPY . .
使用yarnCLI 和包管理器安裝應用程序的依賴項。為此,請使用以下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,因此您現在不會使用它。但是, 請在此處瞭解更多信息。

user avatar leancloud 頭像 abelethan 頭像
2 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.