## FROM
盡量使用官方的image作為base image

## LABEL
使用label可以添加作者信息,版本信息,描述等.
`LABEL`指令會添加元數據到鏡像。`LABEL`是以鍵值對形式出現的。為了在`LABEL`的值里面可以包含空格,你可以在命令行解析中使用引號和反斜杠。

## RUN
在build鏡像時,開始執行run中的命令,但是需要注意的是,每使用一次run,都會構建新的一層image.所以盡量使用一次.使用&&來連接命令.
**注意:**
* 將多個RUN指令合并為一個
* 基礎鏡像的標簽不要用latest
* 每個RUN指令后刪除多余文件
## WORKDIR
指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。
docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄才會一直存在。
Dockerfile中的WORKDIR指令用于指定容器的一個目錄, 容器啟動時執行的命令會在該目錄下執行。

**注意:**
* 用WORKDIR,不要用RUN cd
* 盡量使用絕對目錄
## ADD和COPY
復制指令,從上下文目錄(本地目錄)中復制文件或者目錄到image里指定路徑。兩者區別不大,但是ADD會自動解壓打包的文件
**注意:**
* 如果源路徑是個文件,且目標路徑是以 / 結尾, 則docker會把目標路徑當作一個目錄,會把源文件拷貝到該目錄下。如果目標路徑不存在,則會自動創建目標路徑。
* 如果源路徑是個文件,且目標路徑是不是以 / 結尾,則docker會把目標路徑當作一個文件。如果目標路徑不存在,會以目標路徑為名創建一個文件,內容同源文件;如果目標文件是個存在的文件,會用源文件覆蓋它,當然只是內容覆蓋,文件名還是目標文件名.如果目標文件實際是個存在的目錄,則會源文件拷貝到該目錄下。 注意,這種情況下,最好顯示的以 / 結尾,以避免混淆。
* 如果源路徑是個目錄,且目標路徑不存在,則docker會自動以目標路徑創建一個目錄,把源路徑目錄下的文件拷貝進來。如果目標路徑是個已經存在的目錄,則docker會把源路徑目錄下的文件拷貝到該目錄下。
* 如果源文件是個歸檔文件(壓縮文件,比如 .tar文件),則docker會自動幫解壓。但是.tar.gz文件是不會自動解壓的。


## ENV
設置環境變量,定義了環境變量,那么在后續的指令中,就可以使用這個環境變量。盡量使用ENV,可以增加可維護性.
