Dockerfile 指令詳解
docker build [選項] <上下文路徑/URL/->
其他構建方法
直接用Git repo 進行構建
用給定的tar壓縮包構建
從標準輸入中讀取Dockerfile進行構建
從標準輸入中讀取上下文壓縮包進行構建
FROM指定基礎鏡像
是必備指令,必須是第一條指令
FROM就是指定基礎鏡像
LABEL
鏡像添加標簽來幫助組織鏡像、記錄許可信息、輔助自動化構建等
一個鏡像可以包含多個標簽,但建議將多個標簽放入到一個 LABEL 指令中
RUN 執行指令
shell 格式 RUN 命令
exec格式 RUN ["可執行文件","參數1","參數2"]
支持Shell類的行尾添加 \ 的命令換行 首位#進行註釋
最後添加清理工具的命令,刪除為了編譯所構建所需的軟件
COPY復制文件
COPY <源路徑>...<目標路徑>
COPY ["<源路徑1>",..."<目標路徑>"]
ADD更加高級的復制文件
<源路徑> 可以是一個URL,這種情況下會去下載這個鏈接文件放到<目標路徑>去,並設置文件權限為600
如果<源路徑> 為一個tar 壓縮文件的話,壓縮格式為gzip,bzip2以及xz
CMD容器啟動命令 (只可出現一次)
shell 格式 CMD <命令>
exec 格式 CMD ["可執行文件","參數1","參數2"....]
參數列表格式 CMD ["參數1","參數2"... ]. 在指定了ENTRYPOINT指令後,用CMD指定具體的參數
CMD指令就是用於指定默認的容器主進程的啟動命令
在運行時可以指定新的命令來替代鏡像設置中的這個默認名利
shell格式 相當於 exec格式 CMD ["sh","-c","shell 命令"]
ENTRYPOINT 入口點(只可出現一次)
是將CMD的內容作為參數傳給ENTRYPOINT
<ENTRYPOINT> "<CMD>"
使用CMD時加個參數可能會遇到報錯 希望在容器運行,就必須重新輸入完整命令
使用ENTRYPOINT 就可以避免
啟動容器就是啟動主進程,有些時候,啟動主進程前,需要一寫準備工作
可以將這些預處理的工作寫成一個腳本,放在ENTRYPOINT中執行
ENV 設置環境變量
ENV <key><value>
ENV <key1>=<value1><key2>=<value2>
定義了環境變量,那麽在後續的指令中,就可以使用這個環境變量。
ARG 構建參數
ARG <參數名> [=< 默認值>]
構建參數和ENV 的效果一樣,都是設置環境變量
ARG所設置的構建環境的環境變量,在將來容器運行時是不會存在這些環境變量的
VOLUME 定義匿名卷
VOLUME ["<路徑1>","<路徑2>"...]
VOLUME <路徑>
事先制定某些目錄掛載為匿名卷
EXPOSE 聲明端口
EXPOSE <端口1>[<端口2>...]
聲明運行容器提供服務端口。
-p 是映射宿主機端口和容器端口,就是將容器對應端口服務公開給外界訪問
EXPOSE僅僅是聲明容器打算使用什麽端口
WORKDIR 指定工作目錄
WORKDIR <工作目錄路徑>
WORKDIR 指令可以來指定工作目錄(當前目錄)目錄不存在,會自動建立
USER 指定當前用戶
USER <用戶名>
切換到指定用戶,這個用戶必須是事先建立好的,否則無法切換
HEALTHCHECK 健康檢查 (只可出現一次)
HEALTHCHECK [選項] CMD <命令> 設置檢查容器健康狀態的命令
HEALTHCHECK NONE 屏蔽掉基礎鏡像健康檢查指令
設置好後 啟動容器,初始狀態為starting 在指令檢查成功後 變為 healthy 有一定次數失敗變為unhealthy
--interval=<間隔> 兩次健康檢查的間隔,默認30S
--timeout=<時長> 健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認30秒
--retries=<次數> 當連續失敗指定次數後,則將容器是為unhealthy,默認3次
分為 shell 格式 和 exec 格式
命令的返回值決定健康檢查的成功與否 0:成功 1:失敗 2:保留
ONBUILD 為他人做嫁衣
ONBUILD <其它指令> 比如 RUN COPY 等
在當前鏡像構建時並不會被執行,只有被當成基礎鏡像去構建下一級鏡像的時候才會被執行
Dockerfile 指令詳解