Docker 能讀取 Dockerfile內的所有指令,可以於檔案中撰寫所有要執行的指令、以及需求,若後續有需要調整,也只需要在Dockerfile中新增或修改指令,就可以透過docker build 自動化幫我們執行於Dockerfile中所定義的所有指令,來構建出一個 image。
會依照指令順序由上到下執行,並且FROM一定要寫在第一行,會作為基礎的image,至少要有一個基礎的image,才可以構建image。
FROM 表示 從哪一個image下載 : 後方加上版本號
FROM <image>:<tag>
ex. FROM arm64v8/openjdk:17-ea-16-jdk
⇒ 從 arm64v8/openjdk
中下載 17-ea-16-jdk
會找到Docker Hub中的image
WORKDIR </name>
:在container內設置工作目錄路徑
RUN <要執行的指令>
:image 構建時,要執行的指令。 ex. RUN yarn run
COPY <name> <path>
:檔案名稱 / 要複製的檔案在專案中的路徑位置。會將本地的檔案複製到container中。
EVN <key> <value>
用於 Dockerfile 中設定環境變數,這些變數可以在後續的指令中使用。 ex. ENV JAVA_HOME /user/…路徑位置
CMD[]
執行container時,預設要執行的,一個Dockerfile文件只能有一個CMD命令,若有多個CMD命令,只有最後一個會生效。
LABEL
可用來定義任何你想紀錄的訊息。ex. LABEL version="1.0”
USER <username> / <ID>
設定執行container的預設使用者、或是識別碼、使用者id 等等。ex. USER root、USER 1001
EXPOSE <port>
讓其他人知道container是使用哪一個port號運行,不會影響container實際運行時的port號。 ex. EXPOSE 8080
其他詳細關於Dockerfile的使用方式,可以瀏覽官方文件 Dockerfile reference。