什麼是 Dockerfile 以及如何使用它

Dockerfile 是建構 Docker 映像檔的配方。

這是工作流程:首先建立一個 Dockerfile,然後使用 docker build 從中建立一個 Docker 映像檔,最後從映像檔執行容器。

Dockerfile 是一個包含建構映像檔指令的文字檔案。

這些指令是部分組態語言,其中包含 FROMLABELRUNCOPYENTRYPOINTCMDEXPOSEENV 等關鍵字。

讓我們建立我們的第一個 Dockerfile:

假設你有一個包含簡單 Node.js 應用程式的資料夾,由一個 app.js 檔案組成,該檔案列出了在運行應用程式之前需要安裝的幾個相依性,以及 package-lock.json

在其中,創建一個名為 Dockerfile 的純文字檔案,不要加上副檔名,並包含以下內容:

FROM node:14
WORKDIR /usr/src/app
COPY package\*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]

注:CMD 行中使用雙引號。單引號會導致錯誤。

在第一行中,我們指定要從哪個映像檔開始。這將是我們的基底映像檔。在這個案例中,它將使用基於 Alpine Linux 的官方 Node.js 映像檔,使用 Node 14。當從 Dockerfile 建立容器時,Docker 將從 Docker Hub 獲取該映像檔。

接下來,我們將工作目錄設定為 /usr/src/app,這意味著我們的所有命令都將在該資料夾中執行,直到我們再次更改它。這是我們已知在 Node 映像檔中存在的資料夾。

我們複製位於當前資料夾中的 package.jsonpackage-lock.json(使用星號萬用字元)和 app.js 檔案到工作目錄中。

我們執行 npm install 來安裝 package.json 檔案中列出的套件。

然後,我們將 port 3000 暴露給外部網路,因為這是我們的應用程式運行的 port。除非使用 EXPOSE 指令將其中一個 port 暴露給外部,否則容器完全與網路隔離。稍後我們將看到如何將電腦上的 port 映射到 Docker 容器中的 port。

最後,我們執行 node app.js 來啟動應用程式。

這就是一個 Dockerfile,我們很快將看到如何從中建立一個容器。