Dockerfile實際上就是一系列建立Docker鏡像的腳本, 雖然能夠經過命令行來執行, 可是那樣繁瑣並且容易出錯.html
他的意思是在建立新的鏡像時使用的基礎鏡像.python
他的意思是在容器中須要運行的命令, 它包括安裝軟件、建立文件和目錄, 以及建立環境配置等.
nginx
Copy指令將文件或者目錄複製到容器的文件系統, 文件和目錄需位於相對於Dockerfile的路徑中.redis
Add指令與Copy指令很是相似,但它包含更多功能。除了將文件從主機複製到容器映像,Add指令還可使用URL規範從遠程位置複製文件。docker
Workdir指定的功能至關於使用cd切換工做目錄.npm
配置容器啓動後執行的命令,而且不可被docker run提供的參數覆蓋。每一個Dockerfile中只能有一個Entrypoint,當指定多個時,只有最後一個有效。bash
ENV命令用於設置環境變量。這些變量以」key=value」的形式存在,並能夠在容器內被腳本或者程序調用。這個機制給在容器中運行應用帶來了極大的便利。app
Cmd指令用於設置部署容器映像的實例時要運行的默認命令。若是 Dockerfile中指定了多個Cmd指令,只會計算最後一個指令。也可使用以下命令行在啓動時重載:優化
docker run [$image] [$other_command]
Expose用來指定端口,使容器內的應用能夠經過端口和外界交互。spa
經過上述咱們能夠看到RUN、ENTRYPOINT和CMD都是執行命令, 可是其實他們是有區別的.
執行的時間點不一樣, 做用也不一樣, 按順序以下:
在許多狀況下, Dockerfile指令須要跨多個行;這可經過轉義字符完成。 默認Dockerfile轉義字符是反斜槓"". 因爲反斜槓在Windows中也是一個文件路徑分隔符,這可能致使出現問題。
因此在Windows下能夠修改轉義字符, 方法是Dockerfile的第一行放置以下轉義分析程序指令:
# escape=`
注意,只有兩個值可用做轉義字符: 和 ` 。
大體總結優化規則以下: