1. 程式人生 > >docker基礎——5.Dockerfile

docker基礎——5.Dockerfile

監聽 說明 shell 文件 數組 daemon file rep try

把應用部署在容器中,改變了用文本文件保存配置信息的方式。而通過傳環境變量配置。

Dockerfile是一個文本文件,包括容器的指令。按順序從上到下執行,第一行非註釋指令必須是FROM指定基礎鏡像。

Dockerfile的工作邏輯:

(1)在一個專用目錄放入Dockerfile文件,首字母大寫。
(2)Dockerfile引用的文件都在工作目錄下,.dockeringore文件中標明的文件在打包時會被排除。
(3)docker build命令把Dockerfile引用的工作目錄傳入Docker daemon,然後開始按照Dockerfile中的內容構造鏡像。
(4)Dockerfile中的每一條指令都會生出一個新的鏡像層,最終的鏡像就是基礎鏡像上疊加一層層的鏡像層組建的。

指令:

(1)FROM
Dockerfile第一個非註釋行,用於指定基準鏡像。
格式:
FROM <reposotiry>[:<tag>]
FROM <reposotiry>@<digest>
可以用標簽或Hash碼標識鏡像

(2) LABEL
用鍵值格式表示各種元數據
格式:
LABEL <key> = <value> <key> = <value> ...
例:LABEL autor="ss" time="20190312"

(3) COPY
用於從主機復制文件至創建的新映像文件
格式:
COPY <src> <dest>

<src>:要復制的源文件或目錄,支持通配符。
<dest>:目標路徑,建議使用絕對路徑。
說明:
a.<src>為目錄時,則會遞歸復制,但<src>目錄本身不會被復制;
b.指定多個<src>,或在<src>中使用通配符,則<dest>必須是目錄,以/結尾;
c.<dest>事先不存在,將被自動創建。

(4) ADD
ADD指令類似於COPY指令。ADD支持使用TAR文件和URL路徑。
格式:
ADD <src> <dest>
說明:
a.同COPY指令
b.如果<src>是一個本地系統上的tar文件,它將被展開為一個目錄,類似於tar -x。而通過URL獲取到的tar文件不會展開。

c.如果<src>是多個或使用了通配符,則<dest>必須是/結尾的目錄路徑,否則<src>的內容將被直接寫到<dest>

(5) WORKDIR
用於為Dockerfile中各種指令設定工作目錄
例如:
WORKDIR /usr/local
ADD tmp.tar.gz ./src/

(6) VOLUME
用於在image中創建一個掛載點目錄,以掛載Docker host上的卷或其他容器上的卷。
格式:
VOLUME <mountpoint>

(7) EXPOSE
用於為容器打開指定要監聽的端口
例如:EXPOSE 11211/udp 11211/tcp
配合docker run -P命令使用

(8) ENV
用於為鏡像定義所需的環境變量,並可被Dockerfile文件中位於其後的其他指令所調用。
調用格式:$var 或 ${var}
定義格式:
ENV <key> <value>
ENV <key>=<value> ...

(9) RUN
針對於FROM的基礎鏡像,在docker build階段執行。
格式:
RUN <command>
RUN ["<executable>", "<param1>", "<param2>"]
註意:
第一種方式,命令通過/bin/sh -c運行;
第二種格式,命令直接運行,不調用shell,該格式被docker當成json數組解析,所以必須用雙引號。

(10) CMD
CMD在docker run啟動容器時運行。
多個CMD,只執行最後一個。
格式:
CMD <command>
CMD ["<executable>", "<param1>", "<param2>"]
CMD ["<param1>", "<param2>"]

(11) ENTRYPOINT
與CMD類似,但在docker run時參數不會覆蓋ENTRYPOINT,而是作為ENTRYPOINT的參數。
CMD與ENTRYPOINT同時存在,CMD作為ENTRYPOINT的參數。

(12) USER
USER <UID>|<UserName>
<UID>必須為/etc/passwd中有效的UID

(13) HEALTHCHECK
健康檢查

(14) SHELL
指定shell
默認
linux:["/bin/sh", "-c"]
win:["cmd", "/s", "/c"]

(15) STOPSIGNAL
更改stop的信號,默認是15

(16) ARG
在docker build時傳參數。

(17) ONBUILD
用於在Dockerfile中定義一個觸發器,在別人用該鏡像作為基礎鏡像是使用。

docker基礎——5.Dockerfile