目錄
- 用前端姿勢玩docker【一】Docker通俗理解常用功能匯總與操作埋坑
- 用前端姿勢玩docker【二】dockerfile定制鏡像初體驗
- 用前端姿勢玩docker【三】基於nvm的前端環境構建技巧
- 用前端姿勢玩docker【四】基於docker快速構建webpack的開發與生產環境
- 用前端姿勢玩docker【五】快速構建中類Unix系統與Windows系統的差異化處理
前言
書接上文,關於dockerfile指令的api在此處不做贅述,在此只是記錄下注意事項: ‘示坑以埋之’。
配置指令
FROM
- dockerfile必須以此開頭
- 一個dockerfile可執行添加多個FROM
*如果配置了私庫,例如FROM 域名/alpine-node
,則在本地沒有拉取對應鏡像的時候,會自動拉取。
ARG
- 單純的docker build執行過程的局部變量,在容器內部會被銷毀
- 常用來定義常量數據,例如版本等等
LABEL
- 裝逼專用
- label的作用只是用來便於做搜索推薦、提示等,類似元信息、元標簽。
- 多個label多行展示
LABEL name=tate
LABEL area=China
EXPOSE
- 只聲明鏡像內監聽的服務端口,不做映射處理
EXPOSE 22 80 8443
- 與 -p 端口映射無沖突
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 指令用來指定啟動容器時默認執行的命令
- 根據需要添加即可,例如只是做node處理,則直接執行node命令即可。
- 支持三種格式:
- CMD ["executable", "param1", "param2"]:相當於執行 executable param1 param2, 此方式較為推薦;
- CMD command paraml param2 :在默認的 Shell 中執行,提供給需要交互的應用;
- 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/