Dockerfile指令的使用

關於Dockerfile

Dockerfile實際上就是一系列建立Docker鏡像的腳本, 雖然能夠經過命令行來執行, 可是那樣繁瑣並且容易出錯.html

Dockerfile指令

FROM

他的意思是在建立新的鏡像時使用的基礎鏡像.python

  • 格式:
    • From [name]
  • 示例:
    • From nginx
    • From microsoft/dotnet-aspnetcore-runtime

RUN

他的意思是在容器中須要運行的命令, 它包括安裝軟件、建立文件和目錄, 以及建立環境配置等.
nginx

  • 格式:
    • Run ["","",""]
    • Run [command]
  • 示例:
    • Run npm install npm -g
    • Run mkdir -p /usr/src/redis
    • Run npm install && npm start
    • Run ["npm","install","npm","-g"]

COPY

Copy指令將文件或者目錄複製到容器的文件系統, 文件和目錄需位於相對於Dockerfile的路徑中.redis

  • 格式:
    • Copy [ospath] [dockerpath]
    • Copy ["",""]
  • 示例:
    • Copy . .
    • Copy nginx.conf /etc/nginx/nginx.conf
    • Copy . /usr/share/nginx/html
    • Copy hom* /mydir/

ADD

Add指令與Copy指令很是相似,但它包含更多功能。除了將文件從主機複製到容器映像,Add指令還可使用URL規範從遠程位置複製文件。docker

WORKDIR

Workdir指定的功能至關於使用cd切換工做目錄.npm

  • 格式:
    • Workdir [newpath]
  • 示例:
    • Workdir /app

ENTRYPOINT

配置容器啓動後執行的命令,而且不可被docker run提供的參數覆蓋。每一個Dockerfile中只能有一個Entrypoint,當指定多個時,只有最後一個有效。bash

  • 格式:
    • Entrypoint ["", ""]
  • 示例:
    • Entrypoint ["dotnet", "App.Web.Host.dll"]

ENV

ENV命令用於設置環境變量。這些變量以」key=value」的形式存在,並能夠在容器內被腳本或者程序調用。這個機制給在容器中運行應用帶來了極大的便利。app

  • 格式:
    • Env [name]=[value]
  • 示例:
    • Env VERSION=1.0 DEBUG=on NAME="Magicodes"

CMD

Cmd指令用於設置部署容器映像的實例時要運行的默認命令。若是 Dockerfile中指定了多個Cmd指令,只會計算最後一個指令。也可使用以下命令行在啓動時重載:優化

docker run [$image] [$other_command]

EXPOSE

Expose用來指定端口,使容器內的應用能夠經過端口和外界交互。spa

  • 格式:
    • Expose [port]
  • 示例:
    • Expose 80

補充

總結

經過上述咱們能夠看到RUN、ENTRYPOINT和CMD都是執行命令, 可是其實他們是有區別的.

執行的時間點不一樣, 做用也不一樣, 按順序以下:

  • RUN:建立鏡像時, 一般用於安裝軟件包
  • ENTRYPOINT:啓動容器時, 能夠用來輸出日誌
  • CMD:啓動容器後, 能夠用來啓動應用

轉義字符

在許多狀況下, Dockerfile指令須要跨多個行;這可經過轉義字符完成。 默認Dockerfile轉義字符是反斜槓"". 因爲反斜槓在Windows中也是一個文件路徑分隔符,這可能致使出現問題。

因此在Windows下能夠修改轉義字符, 方法是Dockerfile的第一行放置以下轉義分析程序指令:

# escape=`

注意,只有兩個值可用做轉義字符: 和 ` 。

優化

大體總結優化規則以下:

  • 選擇合適的基礎鏡像
  • 優化指令順序
  • 合併指令
  • 刪除多餘文件和清理沒用的中間結果
  • 使用 .dockerignore
相關文章
相關標籤/搜索