目錄
1,什麼是Dockerfile
1,Dockerfile是用來構建Docker鏡像的構建文件,是由一系列的命令和參數構成的腳本
2,Dokcerfile的構建步驟
編寫Dokcerfile文件
docker build 生成新的鏡像
docker run 運行鏡像
3,以centos的鏡像爲例來說明 https://hub.docker.com/_/centos
2,DockerFile構建過程解析
2.1基礎知識
1,每條保留字指令都必須爲大寫字母后面要跟隨至少一個參數 2,指令從上到下順序執行 3,#表示註釋 4,每條指令都會創建一個新的鏡像層,並對鏡像進行提交
2.2大致流程
1,docker從基礎鏡像運行一個容器 2,執行一條指令並對容器進行修改 3,執行類似於docker commit的操作提交一個新的鏡像 4,docker再基於剛提交的新的鏡像運行一個新的容器 5,執行dockerfile的下一個指令再從執行第2點直到沒有指令
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體系結構(關鍵字---重點啊)
FROM 基礎鏡像,當前新鏡像是基於哪個鏡像的
MAINTAINER 鏡像維護者的姓名和郵箱地址
RUN 容器構建時需要運行的命令
EXPOSE 當前容器對外暴露的端口
WORKDIR 指定在創建容器後,終端默認登陸進來的工作目錄
ENV 用來在構建鏡像過程中設置環境變量
ADD 將宿主機目錄下的文件拷貝進鏡像並且ADD命令會自動處理URL和解壓tar包
COPY 類似ADD,拷貝文件和目錄到鏡像中 ,語法COPY src dest COPY [''src","dest"]
VOLUME 容器數據卷,用於數據保存和持久化工作
CMD 指定一個容器啓動時要運行的命令格式
shell: CMD <命令>
exec CMD ['可執行文件',"參數1","參數2"]
DockerFile中可以有多個CMD指令,但只有最後一個生效,CMD會被docker run之後的參數替換
ENTEYPONT 指定一個容器啓動時要運行的命令
ENTRYPOINT的目地和CMD一樣,都是在指定容器啓動程序及參數
OBBUILD 當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子鏡像繼承後觸發父鏡像的onbuild
總結