Docker入門(五)——DockerFile解析

一、是什麼

1、概念
      Dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本。
2、構建三步驟
      (1)編寫Dockerfile文件;(2)docker build;(3)docker run
3、文件什麼樣
      類似maven一樣,我們可以去到網站:hub.docker.com,例如在這裏我們搜索一些centos,搜索結果中選中任一版本進去後,我們可以看到DockerFile的內容是這樣的:
在這裏插入圖片描述

二、DockerFile構建過程解析

1、DockerFile內容基礎知識
      (1)每條保留字指令都必須爲大寫字母且後面要跟隨至少一個參數;
      (2)指令按照從上到下,順序執行;
      (3)#表示註釋;
      (4)每條指令都會創建一個新的鏡像層,並對鏡像進行提交。
2、DockerFile執行的大致流程
      (1)docker從基礎鏡像運行一個容器;
      (2)執行一條指令並對容器作出修改;
      (3)執行類似docker commit的操作提交一個新的鏡像層;
      (4)docker再基於剛提交的鏡像運行一個新容器;
      (5)執行dockerfile的下一條指令直到所有指令都執行完成。
3、小總結
      從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段:

  • Dockerfile是軟件的原材料;
  • Docker鏡像是軟件的交付品;
  • Docker容器則可以認爲是軟件的運行態。
          Dockerfile面向開發,Docker鏡像成爲交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。

在這裏插入圖片描述
      (1)Dockerfile,需要定義一個Dockerfile,Dockerfile定義了進程需要的一切東西。Dockerfile涉及的內容包括執行代碼或者是文件、環境變量、依賴包、運行時環境、動態鏈接庫、操作系統的發行版、服務進程和內核進程(當應用進程需要和系統服務和內核進程打交道,這時需要考慮如何設計namespace的權限控制)等等;
      (2)Docker鏡像,在用Dockerfile定義一個文件之後,docker build時會產生一個Docker鏡像,當運行Docker鏡像時,會真正開始提供服務;
      (3)Docker容器,容器是直接提供服務的。

三、DockerFile體系結構(保留字指令)

FROM

      基礎鏡像,當前新鏡像是基於哪個鏡像的

MAINTAINER

      鏡像維護者的姓名和郵箱地址

RUN

      容器構建時需要運行的命令

EXPOSE

      當前容器對外暴露出的端口(如EXPOSE 8080)

WORKDIR

      指定在創建容器後,終端默認登錄進來工作目錄,一個落腳點

ENV

      用來在構建鏡像過程中設置環境變量

ADD

      將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包

COPY

      類似ADD,拷貝文件和目錄到鏡像中。將從構建上下文目錄中<源路徑>的文件/目錄複製到新的一層的鏡像內的<目錄路徑>位置。COPY 源 目的,即 COPY src dest 或 COPY [“src”,“dest”]

VOLUME

      容器數據卷,用於數據保存和持久化工作

CMD

      指定一個容器啓動時要運行的命令。Dockerfile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run之後的參數替換。

ENTRYPOINT

      指定一個容器啓動時要運行的命令。ENTRYPOINT的目的和CMD一樣,都是在指定容器啓動程序及參數。

ONBUILD

      當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章