初見dockerFile:https://blog.csdn.net/ak739105231/article/details/105856710
一、Docker是什麼?
Dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳步。
構建三步驟:1.編寫dockerfile文件;2.docker biuld 將dockerfile打包成鏡像文件;3.docker run 實例化鏡像文件,容器運行
dockerfile示例:在阿里雲的容器鏡像服務中選擇鏡像,可以進入GitHub,看到對應鏡像的dockerfile,下面是centos的dockerfile:
上面截圖中的:scratch,是所有鏡像的源鏡像(base鏡像);(相當於java中的object類);DockerHub中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構建出來的;
上面截圖中的:紅色字體(如:FROM),稱爲“保留字指令”;必須大寫;
二、Dockerfile構建過程解析
Dockerfile內容基礎知識:
1.每條保留字指令都必須爲大寫字母,且後面要跟隨至少一個參數;
2.指令按照從上到下,順序執行;
3.#表示註釋
4.每條指令都會創建一個新的 鏡像層,並對鏡像進行提交;
Docker執行Dockerfile的大致流程:
1.docker從基礎鏡像(源鏡像)運行一個容器
2.執行一條指令並對容器作出修改
3.執行類似docker commit的操作提交一個新的鏡像層
4.docker再基於剛提交的鏡像運行一個新容器
5.執行dockerfile中的下一條指令直到所有指令都執行完畢;
從應用軟件的角度來看,dockerfile、docker鏡像、docker容器分別代表:原材料、交付品、軟件的運行態;
三、DockerFile保留字指令
FROM:基礎鏡像,當前新鏡像是基於哪個鏡像的
MAINTAINER:鏡像維護者的姓名和郵箱地址
RUN:容器構建時需要運行的命令
EXPOSE:當前容器對外暴露出的端口
WORKDIR:指定在創建容器後,終端默認登錄的進來工作目錄,一個落腳點;
ENV:用來在構建鏡像過程中設置環境變量
ADD:將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包
COPY:類似ADD,拷貝文件和目錄到鏡像中,但沒有ADD強大,ADD是拷貝+解壓;COPY僅是拷貝;格式:COPY src dest 或者COPY['src','dest']
VOLUME:容器數據卷,用於數據保存和持久化工作
CMD:指定一個容器啓動時要運行的命令,dockerfile中可以有多個CMD指令,build時都會執行;但docker run時,是最後一個生效,CMD會被docker run之後的參數替換;
ENTRYPOINT:指定一個容器啓動時要運行的命令,ENTRYPOINT的目的和CMD一樣,都是在指定容器啓動程序和參數,區別:docker run之後的參數不會替換ENTRYPOINT命令,而是追加。
ONBUILD:當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發。
四、根據實例,理解DockerFile,理解保留字指令
案例1:自定義centos鏡像:理解基本保留字指令
在精簡版centos,沒有vim,ifconfig等常用的工具,因此,我們需要在精簡版centos上備註一些自己需要的工具;所以需要自定義自己需要的鏡像;
步驟1:編寫DockerFile
步驟2:構建鏡像:docker build -f /mydocker/DockerFile -t centos:6.7.8 .
步驟3:docker history 鏡像ID或者鏡像名稱:tag//查看鏡像形成過程
步驟4:實例化容器並運行:docker run -it 鏡像name:tag或id
可以看出dockerFile的效果;