什麼是 Dockerfile 以及如何使用它
Dockerfile 是建構 Docker 映像檔的配方。
這是工作流程:首先建立一個 Dockerfile,然後使用 docker build
從中建立一個 Docker 映像檔,最後從映像檔執行容器。
Dockerfile 是一個包含建構映像檔指令的文字檔案。
這些指令是部分組態語言,其中包含 FROM
、LABEL
、RUN
、COPY
、ENTRYPOINT
、CMD
、EXPOSE
、ENV
等關鍵字。
讓我們建立我們的第一個 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.json
、package-lock.json
(使用星號萬用字元)和 app.js
檔案到工作目錄中。
我們執行 npm install
來安裝 package.json
檔案中列出的套件。
然後,我們將 port 3000 暴露給外部網路,因為這是我們的應用程式運行的 port。除非使用 EXPOSE
指令將其中一個 port 暴露給外部,否則容器完全與網路隔離。稍後我們將看到如何將電腦上的 port 映射到 Docker 容器中的 port。
最後,我們執行 node app.js
來啟動應用程式。
這就是一個 Dockerfile,我們很快將看到如何從中建立一個容器。