天天看點

Docker之8 Dockerfile

什麼是Dockerfile?

Dockerfile是由多行指令語句組成的建構鏡像的檔案,一般指令分成四部分:基礎鏡像資訊,中繼資料資訊,鏡像操作指令和容器啟動時執行的指令。并且支援使用#作為注釋使用。

Docker之8 Dockerfile

Dockerfile指令:

1、FROM
格式:FROM <image>或 FROM <image>:<tag>
基礎鏡像來源,必須在第一行指令中指定,不指定标記則預設為latest。
2、LABEL
格式:LABEL <name>=<value>
指定添加中繼資料到鏡像,可指定多個标簽資訊。
3、RUN
格式:RUN <command>
每條指令将在目前鏡像基礎上執行,并送出為新的鏡像。
4、CMD
格式:CMD <command>
指定啟動容器時執行的指令,每個Dockerfile隻能有一條CMD指令,如果指定了多條CMD指令,則隻會執行最後一條CMD指令。如果在啟動鏡像時指定了啟動指令,則鏡像預設的CMD指令不執行。一般用于執行容器時提供預設值。
5、EXPOSE
格式:EXPOSE <port>
指定鏡像啟動後暴露的端口,在容器啟動時需要通過 -p 做端口映射
6、ENV
格式:ENV <key> <value>
指定環境變量,使用在建構階段中的所有後續指令的環境。
7、ADD
格式:ADD  <src> <dest>
該指令會在<src>(本地檔案系統或遠端網絡位置) 進行複制新檔案,并将它們添加到路徑上圖像的檔案系統中<dest>。
8、COPY
格式:COPY <src> <dest>
複制本地主機的 <src> (為 Dockerfile 所在目錄的相對路徑) 到容器中的 <dest>。
9、ENTRYPOINT
格式:ENTRYPOINT <command>
配置容器啟動後執行的指令,并且不可被docker run提供的參數覆寫。如果指定了多條ENTRYPOINT指令,則隻會執行最後一條ENTRYPOINT指令。
10、VOLUME
格式:VOLUME  <FileSystemMountPoint>
建立一個可以從本地主機或其他容器挂載的挂載點,一般用來存放資料庫和需要保持的資料等
11、USER
格式:USER <user>:<group> | USER <uid>:<gid>
指定運作容器時的使用者名或 UID,後續的 RUN 也會使用指定使用者。
12、WORKDIR
格式:WORKDIR <FileSystemPath>
為後續的 COPY、ADD、RUN、CMD、ENTRYPOINT 指令配置工作目錄。(可以使用多個 WORKDIR 指令,後續指令如果參數是相對路徑, 則會基于之前指令指定的路徑)
13、ARG
格式:ARG <varname>[=<value>]
該ARG指令定義了一個變量,使用者可以docker build使用該--build-arg <varname>=<value> 标志在建構時将該變量傳遞給建構器。
14、ONBUILD
格式:ONBUILD [INSTRUCTION]
配置當所建立的鏡像作為其它新建立鏡像的基礎鏡像時,所執行的操作指令,就好像它已經FROM在下遊指令之後立即插入一樣 Dockerfile。
15、STOPSIGNAL
格式:STOPSIGNAL <signal>
設定将發送到容器的系統調用信号以退出。此信号可以是與核心的系統調用表中的位置比對的有效無符号數,例如9,或SIGNAME格式的信号名,例如SIGKILL。
16、HEALTHCHECK
格式:HEALTHCHECK [OPTIONS] CMD command
測試容器以檢查它是否仍在工作。即使伺服器程序仍在運作,這也可以檢測到陷入無限循環且無法處理新連接配接的Web伺服器等情況。當容器指定了運作狀況檢查時,除了正常狀态外,它還具有運作狀況。這個狀态最初是starting。每當健康檢查通過時,它就會變成healthy(以前所處的狀态)。經過一定數量的連續失敗後,它就變成了unhealthy。
17、SHELL
格式:SHELL ["executable", "parameters"]
該SHELL指令允許覆寫用于shell指令形式的預設shell。Linux上的預設shell是["/bin/sh", "-c"],而在Windows上["cmd", "/S", "/C"]。該SHELL指令必須以JSON格式寫入Dockerfile。           

Dockerfile建構鏡像

FROM centos:latest

LABEL maintainers="yekangming"

RUN echo "helloworld"

CMD ["/bin/echo", "hellodocker"]           
docker build -t app:v1 .