FROM
功能為指定基礎鏡像,並且必須是第一條指令。 如果不以任何鏡像為基礎,那么可寫為:FROM scratch。
接下來所寫的指令將作為鏡像的第一層開始。
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>
默認值為latest
MAINTAINER
指定作者
格式:
MAINTAINER <name>
ENV
為容器設定環境變量
ENV <key> <value> 設置一個
ENV <key>=<value> 設置多個
ADD
復制,把文件復制到鏡像中(Dockfile所在目錄為根目錄),類似於scp
ADD <src>... <dest>
ADD ["<src>",... "<dest>"]
如果把
寫法:
ADD ares t1/
ADD ares /t1
ADD http://example.com/ares /
若src是個目錄,則會把目錄下所有文件復制到容器,不會復制目錄
COPY
復制命令
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]
COPY的
VOLUME
掛載功能,將本地目錄或者其他容器內得目錄掛在到這個容器中,一般掛載數據文件
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /data
任何向 /data 中寫入的信息都不會記錄進容器存儲層,從而保證了容器存儲層的無狀態化,容器運行時可通過-v覆蓋配置
USER
設置啟動容器的用戶,可以是用戶名或UID
USER daemo
USER UID
如果設置了容器以daemon用戶去運行,那么RUN, CMD 和 ENTRYPOINT 都會以這個用戶去運行
WORKDIR
WORKDIR 指令可以來指定工作目錄(或者稱為當前目錄),以后各層的當前目錄就被改為指定的目錄,如該目錄不存在, WORKDIR 會自動建立目錄。
WORKDIR <工作目錄路徑>
EXPOSE
聲明端口,暴漏容器運行時的監聽端口給外部
EXPOSE <端口1> [<端口2>...]
運行時並不會因為這個聲明應用就會開啟這個端口的服務.在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。
RUN
運行指定的命令
RUN <command>
RUN ["executable", "param1", "param2"]
第一種后邊直接跟shell命令
在linux操作系統上默認 /bin/sh -c
在windows操作系統上默認 cmd /S /C
第二種是類似於函數調用。
RUN書寫時的換行符是\,多行命令不要寫多個RUN,使用&&連接
CMD
容器啟動時要運行的命令
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
只可以使用雙引號!
CMD echo $HOME實際會被翻譯成CMD [ "sh", "-c", "echo $HOME" ]
Docker 不是虛擬機,容器中的應用都應該以前台執行!
CMD service nginx start命令應該寫為CMD ["nginx", "-g", "daemon off;"]
RUN是構件容器時就運行的命令以及提交運行結果;
CMD是容器啟動時執行的命令,在構件時並不運行,構件時緊緊指定了這個命令到底是個什么樣子;
可寫多個,只有最后一個生效
ENTRYPOINT
功能是啟動時的默認命令,不可被 docker run 提供的參數覆蓋
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
如果我們在Dockerfile種同時寫了ENTRYPOINT和CMD,並且CMD指令不是一個完整的可執行命令,那么CMD指定的內容將會作為ENTRYPOINT的參數
示例:
CMD ["-f","/var/log/message"]
ENTRYPOINT ["tail"]
會在啟動的時候執行tail -f /var/log/message
ARG
構建參數
ARG <參數名>[=<默認值>]
ARG命令定義了一個變量,在docker build創建鏡像的時候,使用 –build-arg =來指定參數
ONBUILD
ONBUILD <其它指令>
ONBUILD 是一個特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等,而這些指令,在當前鏡像構建時並不會被執行。只有當以當前鏡像為基礎鏡像,去構建下一級鏡像的時候才會被執行。
STOPSIGNAL
當容器推出時給系統發送什么樣的指令
STOPSIGNAL signal
HEALTHCHECK
容器健康狀況檢查命令,告訴 Docker 應該如何進行判斷容器的狀態是否正常
HEALTHCHECK [OPTIONS] CMD command :設置檢查容器健康狀況的命令
HEALTHCHECK NONE :如果基礎鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指令
[OPTIONS]的選項支持以下三中選項:
--interval=DURATION 兩次檢查默認的時間間隔,默認為30秒
--timeout=DURATION 健康檢查命令運行超時時長,默認30秒
--retries=N 當連續失敗指定次數后,則容器被認為是不健康的,狀態unhealthy,默認次數是3
HEALTHCHECK 只可以出現一次,如果寫了多個,只有最后一個生效。
CMD后邊的命令的返回值決定了本次健康檢查是否成功,具體的返回值如下:
0: success - 表示容器是健康的
1: unhealthy - 表示容器已經不能工作了
2: reserved - 保留值
示例:
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1
健康檢查命令是:curl -f http://localhost/ || exit 1
兩次檢查的間隔時間是5秒
命令超時時間為3秒
