用前端姿勢玩docker【二】dockerfile定製鏡像初體驗

前言

書接上文,關於dockerfile指令的api在此處不做贅述,在此只是記錄下注意事項: ‘示坑以埋之’。

配置指令

FROM

  • dockerfile必須以此開頭
  • 一個dockerfile可執行添加多個FROM

ARG

  • 單純的docker build執行過程的局部變量,在容器內部會被銷燬
  • 常用來定義常量數據,例如版本等等

LABEL

  • label的作用只是用來便於做搜索推薦、提示等,類似元信息、元標籤。
  • 多個label多行展示
LABEL name=tate
LABEL area=China

EXPOSE

  • 只聲明鏡像內監聽的服務端口,不做映射處理 EXPOSE 22 80 8443

ENV

  • 環境變量,在後續RUN中被調用,容器中會被保留。 ENV APP_HOME=/usr/local/app
  • 若遇到相同變量,在Run命令中會被覆蓋掉 docker run --env APP_HOME=/usr/local/app

ENTRYPOINT

# ENTRYPOINT ["executable", "paraml ", "param2"]: exec 調用執行;
# ENTRYPOINT command param 1 param2: shell 中執行。
  • 指定鏡像的默認入口命令,該入口命令會在啓動容器時作爲根命令執行, 所有傳人值作爲該命令的參數。
  • CMD指定的值將作爲根命令的參數傳遞
  • 單個dockerfile中定義多個入口時,只有最後一個生效。
  • 同樣可被run中的 --entrypoint 參數覆蓋

VOLUME

  • 創建數據掛載點 VOLUME ["/data"]

USER

  • 指定運行容器的user,需要獲取管理員臨時權限時使用gosu命令

WORKDIR

  • 爲後續的 RUN CMD ENTRYPO INT 指令配置工作目錄
  • 多行命令執行結果累加, 建議使用絕對路徑
WORKDIR /a 
WORKDIR b 
WORKDIR c 
RUN pwd
# 結果爲 /a/b/c

ONBUILD

  • 基於所生成鏡像創建子鏡像時,自動執行的操作指令。
  • 使用 docker build 命令創建子鏡像 childImage 時( FROM ParentImage ),會首先執行 Parent mage 配置的 ONBUI LD,相當於在子鏡像的dockerfile中添加相應的指令。
  • 主要用於創建專門用於自動編譯、檢查等操作的基礎鏡像。

STOPSIGNAL

  • 指定所創建鏡像啓動的容器接收退出的信號值

HEALTHCHECK

  • 配置所啓動容器如 進行健康檢查
    HEALTHCHECK [OPTIONS] CMD command :根據所執行命令返回值是否爲0判斷
    HEALTHCHEC NONE : 禁止基礎鏡像中的健康檢查
    OPTION 支持如下參數
    —interva=DURAT (d e fault: 30s ):過多久檢查一次
    —timeout=DURATION (default: 30s): 每次檢查等待結果的超時;
    —retries=N (default:3 ):如果失敗了,重試幾次才最終確定失敗

SHELL

  • 指定其他命令使用 shell 時的默認 shell 類型
  • 默認值 SHELL ["/bin/sh", "-c"]
  • windows 系統中,shell 使用了“\”作爲分隔符,建議在 Dockerfile 開頭添加#escape=' 指定轉義符

操作指令

RUN

  • 格式爲 RUN <command >或 RUN [ "executable " , "paraml", "param2"] 注意意後者指令會被解析爲 JSON 數組,因此必須用雙引號,前者默認將在 shell 終端中運行命令,即 '/bin/bash -c' 後者則使用 exec 執行,不會啓動 shell 環境。
  • 指定使用默認終端 RUN ["/bin/bash", "-c", "echo tate"]
  • 每執行一條RUN命令, 鏡像就會被追加一個鏡像層,其實就是一個RUN命令就是一個獨立的執行結果

CMD

  • CMD 指令用來指定啓動容器時默認執行的命令
  • 支持三種格式:
  1. CMD ["executable", "param1", "param2"]:相當於執行 executable param1 param2, 此方式較爲推薦;
  2. CMD command paraml param2 :在默認的 Shell 中執行,提供給需要交互的應用;
  3. CMD ["param1", "param2"]: 提供給 ENTRYPOINT 的默認參數

ADD

  • 添加指定路徑下的內容到容器中 ADD
  • src可爲文件目錄,也可爲url,或一個tart文件(自動解壓爲目錄)
  • dest可以使絕對路徑,也可以是相對於當前工作目錄的相對路徑

COPY

  • 複製內容到路徑 COPY , 多用於本地目錄爲源目錄時。
  • src 爲dockerfile所在目錄的相對路徑
  • 目標路徑不存在時會自動創建
  • 路徑支持正則表達式

體驗嚐鮮

基於alpine定製

FROM alpine
ARG author=tate
RUN touch /root/docker.txt
COPY copy.sh /root/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章