Docker之DockerFile介紹

  • 2019 年 12 月 30 日
  • 筆記

  本文我們來詳細介紹下Docker中的DockerFile,

1. DockerFile是什麼

  DockerFile是用來構建Docker鏡像的構建文件,是由一系列命令參數構成的腳本

構建的三步驟

1. 編寫Dockerfile文件

2. docker build

3. docker run

腳本文件的樣式,以centos為例

腳本文件內容

FROM scratch  ADD centos-7-x86_64-docker.tar.xz /    LABEL org.label-schema.schema-version="1.0"       org.label-schema.name="CentOS Base Image"       org.label-schema.vendor="CentOS"       org.label-schema.license="GPLv2"       org.label-schema.build-date="20191001"    CMD ["/bin/bash"]

2. DockerFile構建過程

2.1 Dockerfile的基礎知識

  Dockerfile中的指令需要滿足如下的規則

指令的規則

1. 每條保留字指令都必須為大寫字母且後面要跟隨至少一個參數

2. 指令按照從上到下,順序執行

3. #表示注釋

4. 每條指令都會創建一個新的鏡像層,並對鏡像提交

2.2 Docker執行Dockerfile的大致流程

  docker執行一個Dockerfile腳本的流程大致如下:

  1. docker從基礎鏡像運行一個容器
  2. 執行一條指令並對容器作出修改
  3. 執行類似docker commit的操作提交一個新的鏡像層
  4. docker再基於剛提交的鏡像運行一個新的容器
  5. 執行dockerfile中的下一條指令直到所有指令都執行完成

2.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容器,容器是直接提供服務的。

3. DockerFile體系結構

  Dockerfile中的指令說明我們記錄於此,方便查詢

指令

說明

FROM

基礎鏡像,當前新鏡像是基於哪個鏡像的,有繼承的意味

MAINTAINER

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

RUN

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

EXPOSE

當前容器對外暴露的端口

WORKDIR

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

ENV

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

ADD

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

COPY

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

VOLUME

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

CMD

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

ENTRYPOINT

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

ONBUILD

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

好了~本文我們先介紹到此,下篇我們介紹DockerFile的具體案例,通過案例來加深理解!