寫在前面
因MarkDown編輯器語法原因,因內容較多,部分內容可能因未能及時轉義導致出現內容錯誤,望指正!
通用規則
- 指令不區分大小寫。但是,慣例是讓它們成爲大寫的,以便更容易將它們與參數區分開來。
- 指令都是按順序運行。
- 一個Dockerfile 必須用
FROM
指令啓動。該FROM指令指定您正在構建的基本映像(基本映像:沒有父代的鏡像) - 用’#'來註釋說明
解析器指令
解析器指令不區分大小寫,但是,慣例是它們是小寫的
環境變量
- 格式:$variable_name 或 ${variable_name}
- 括號語法通常用於解決具有沒有空格的變量名稱的問題,例如${foo}_bar
- ${variable:-word}表示if variable設置後,結果將是該值。如果variable未設置則word結果將是。
- ${variable:+word}表示如果variable設置則word結果爲結果,否則結果爲空字符串。
以下指令列表支持環境變量Dockerfile:ADD,COPY,ENV,EXPOSE,FROM,LABEL,STOPSIGNAL,USER,VOLUME,WORKDIR和ONBUILD
FROM
- 格式:FROM <image> [AS <name>]
-
- 或 FROM <image>[:<tag>] [AS <name>]
-
- 或 FROM <image>[@<digest>] [AS <name>]
- ARG是唯一一個可能優先於FROM的指令
- 在單個Dockerfile可以出現多次
- tag和digest如果你忽略他們,默認爲最新的標籤,如果不能找到標籤值將返回一個錯誤。
RUN
- 格式:RUN <command>
-
- RUN [“executable”, “param1”, “param2”],注意要使用雙引號
- 在形式上可以使用(反斜槓)繼續一個指令運行到下一行
CMD
格式:CMD [“executable”,“param1”,“param2”] #exec形式,這是首選形式
-
- CMD [“param1”,“param2”] #爲默認參數入口點
-
- CMD command param1 param2 #shell格式
- 只能有一個CMD Dockerfile指令,如果你列出多個CMD只有最後的CMD生效。
- 一個CMD的主要目的是提供一個執行容器的默認值。
- CMD形式不調用shell命令
- RUN實際運行一個命令並提交結果,CMD在構建時不執行任何,但是指定鏡像的默認選項
LABEL
- 格式:LABEL <key>=<value> <key>=<value> <key>=<value> …
- 一個鏡像可以有多個標籤。但最終都會被合併,新的值將覆蓋舊的值
EXPOSE
- 格式:EXPOSE <port> [<port>…]
- 將容器指定的端口暴露出來
ENV
- 格式:ENV <key> <value>
-
- ENV <key>=<value> …(可以一次設置多個,首選,因爲他產生一個緩衝層)
- 設置環境變量值
- 您可以使用docker inspect查看,也可以用docker run --env <key>=<value>改變它
ADD
- 格式:ADD <src>… <dest>
-
- ADD ["<src>",… “<dest>”] (這種格式在路徑包括空格時被要求)
- 添加指定文件檔容器文件系統
- src可以是一個相對路徑,可以使用通配符
- des必須是一個絕對路徑或者相對於WORKDIR的路徑
- 如果<dest>不存在,則創建所有缺失的目錄路徑。
COPY
- 格式:COPY <src>… <dest>
-
- COPY ["<src>",… “<dest>”]
- 複製新文件或目錄<src>並將它們添加到容器的文件系統路徑<dest>。
- 可指定多個<src>資源,可以是相對路徑,可以使用Go的通配符
- des必須是一個絕對路徑或者相對於WORKDIR的路徑
- 如果<src>是一個目錄,目錄的整個內容複製,包括文件系統元數據,目錄本身不可以被拷貝
- 如果<dest>不存在,則創建所有缺失的目錄路徑。
ENTRYPOINT
- 格式:ENTRYPOINT [“executable”, “param1”, “param2”] (exec格式, 首選)
-
- ENTRYPOINT command param1 param2 (shell格式)
- 允許您配置一個容器並運行
- 下面將開始nginx的默認內容,監聽端口80:docker run -i -t --rm -p 80:80 nginx
- 將覆蓋所有CMD指明的元素
- 您可以docker run --entrypoint覆蓋ENTRYPOINT的指令
- 只用此命令你的系統可能將失控╮(╯_╰)╭
VOLUME
- 格式:VOLUME ["/data"]
-
- VOLUME /var/log /var/db …
- 指令創建一個指定掛載點的名稱和標誌是持有外部掛載卷從本地主機或其他容器
USER
- 格式:USER <user>[:<group>]
-
- USER <UID>[:<GID>]
- 如果用戶沒有指定組,鏡像將作爲root組運行
WORKDIR
- 格式:WORKDIR /path/to/workdir
- 設置工作路徑,如果不存在將被創建
ARG
- 格式:ARG <name>[=<default value>]
ONBUILD
- 格式:ONBUILD [INSTRUCTION]
- 觸發器?
STOPSIGNAL
- 格式:STOPSIGNAL signal
- 設置系統呼叫信號將被送到集裝箱出口
HEALTHCHECK
- 格式:HEALTHCHECK [OPTIONS] CMD command (在另一個容器中運行一個命令檢查容器健康狀況)
- HEALTHCHECK NONE(禁用任何healthcheck繼承了基地的形象)
SHELL
- 格式:SHELL [“executable”, “parameters”]
- 覆蓋系統默認的SHELL命令,在linux上默認的系統命令是["/bin/sh", “-c”],在window上是[“cmd”, “/S”, “/C”],必須用JSON格式覆蓋