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腳本的流程大致如下:
- docker從基礎鏡像運行一個容器
- 執行一條指令並對容器作出修改
- 執行類似docker commit的操作提交一個新的鏡像層
- docker再基於剛提交的鏡像運行一個新的容器
- 執行dockerfile中的下一條指令直到所有指令都執行完成
2.3 小結
從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,
- Dockerfile是軟件的原材料
- Docker鏡像是軟件的交付品
- Docker容器則可以認為是軟件的運行態。
Dockerfile面向開發,Docker鏡像成為交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。

- Dockerfile,需要定義一個Dockerfile,Dockerfile定義了進程需要的一切東西。Dockerfile涉及的內容包括執行代碼或者是文件、環境變量、依賴包、運行時環境、動態鏈接庫、操作系統的發行版、服務進程和內核進程(當應用進程需要和系統服務和內核進程打交道,這時需要考慮如何設計namespace的權限控制)等等;
- Docker鏡像,在用Dockerfile定義一個文件之後,docker build時會產生一個Docker鏡像,當運行 Docker鏡像時,會真正開始提供服務;
- 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的具體案例,通過案例來加深理解!