1、什么是Dockerfile
Dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本。
2、Dockerfile解析過程
前提認知:
- 每條保留字指令都必須為大寫字母且后面要跟隨至少一個參數
- 指令按照從上到下,順序執行
-
表示注釋
- 每條指令都會創建一個新的鏡像層,並對鏡像進行提交
解析流程:
- docker從基礎鏡像運行一個容器
- 執行一條指令並對容器作出修改
- 執行類似docker commit的操作提交一個新的鏡像層
- docker再基於剛提交的鏡像運行一個新容器
- 執行dockerfile中的下一條指令直到所有指令都執行完成
從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,
- Dockerfile是軟件的原材料
- Docker鏡像是軟件的交付品
- Docker容器則可以認為是軟件的運行態。
Dockerfile面向開發,Docker鏡像成為交付標准,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。
3、DockerFile體系結構
- FROM 基礎鏡像,當前新鏡像是基於哪個鏡像的
- MAINTAINER 鏡像維護者的姓名和郵箱地址
- RUN 容器構建時需要運行的命令
- EXPOSE 當前容器對外暴露出的端口
- WORKDIR 指定在創建容器后,終端默認登陸的進來工作目錄,一個落腳點
- ENV 用來在構建鏡像過程中設置環境變量
- ADD 將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包
- COPY 類似ADD,拷貝文件和目錄到鏡像中。
將從構建上下文目錄中 <源路徑> 的文件/目錄復制到新的一層的鏡像內的 <目標路徑> 位置 - VOLUME 容器數據卷,用於數據保存和持久化工作
- CMD 指定一個容器啟動時要運行的命令 ,Dockerfile 中可以有多個 CMD 指令,但只有最后一個生效,CMD 會被 docker run 之后的參數替換
- ENTRYPOINT 指定一個容器啟動時要運行的命令,ENTRYPOINT 的目的和 CMD 一樣,都是在指定容器啟動程序及參數
- ONBUILD 當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承后父鏡像的onbuild被觸發