1、DockerFile是什麼docker
一、DockerFile是用來構建docker鏡像的構建文件,是由一系列參數和命令構成的腳本。centos
二、構建三步驟:bash
手動編寫一個dockerfile文件,而後直接docker build命令執行,得到一個自定義的鏡像,最後 docker run 建立一個容器實例。運維
2、centos的DockerFileui
FROM scratch # centos的祖先 MAINTAINER The CentOS Project <cloud-ops@centos.org> # 做者的名字和郵箱 ADD c68-docker.tar.xz / # centos壓縮包 LABEL name="CentOS Base Image" \ vendor="CentOS" \ license="GPLv2" \ build-date="2016-06-02" # 默認的命令,因此在啓動容器時可加可不加 CMD ["/bin/bash"]
3、DockerFile構建過程解析spa
一、DockerFile內容基礎知識:code
(1)每條保留字指令都必須爲大寫字母且後面要跟隨至少一個參數blog
(2)指令從上到下,順序執行繼承
(3)#表示註釋開發
(4)每條指令都會建立一個新的鏡像層,並對鏡像進行提交
二、docker執行DockerFile的大體流程:
(1)docker從基礎鏡像運行一個容器
(2)執行一條指令並同時對容器進行修改
(3)執行相似docker commit的操做提交一個新的鏡像層
(4)docker再基於剛提交的鏡像運行一個新容器
(5)執行DockerFile中的下一條指令直到全部指令都執行完成
三、從應用軟件的角度來看,DockerFile、Docker鏡像和Docker容器分別表明了軟件的三個不一樣階段
DockerFile面向開發,Docker鏡像成爲交付標準,Docker容器則涉及部署和運維,三者缺一不可。
四、關係:DockerFile----build---->Docker鏡像-----run---->Docker容器
4、DockerFile體系結構(保留字指令)
一、FROM 基礎鏡像,也就是當前新鏡像是基於哪一個基礎鏡像的
二、MAINTAINER 鏡像做者的姓名和郵箱地址
三、RUN 構建鏡像的過程當中執行一個具體的命令
四、EXPOSE 當前容器實例對外暴露的端口
五、WORKDIR 制定在建立容器後,終端默認登陸的進來工做目錄
六、ENV 用來在構建鏡像過程當中設置環境變量 如:ENV MY_PATH /usr/mytest 變量名爲 MY_PATH,變量值爲 /usr/mytest
七、ADD 將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包
八、COPY 相似ADD,拷貝文件和目錄到鏡像中。將從構建上下文目錄中<原路勁>的文件/目錄複製到新的一層的鏡像內的<目標路勁>位置
九、VOLUME 容器數據卷,用於數據保存和持久化工做
十、CMD 指定一個容器啓動時要運行的命令,DockerFile中能夠有多個CMD指令,但只有最後一個生效。且若是docker run 後面有命令參數,那麼CMD的會被docker run後面的替換掉
十一、ENTRYPOINT 同CMD相似,也指定一個容器啓動時要運行的命令,但不一樣在於,若是docker run 後面由命令參數,那麼不會覆蓋,而是追加
十二、ONBUILD 當構建一個被繼承的DockerFile時運行命令,父鏡像在被子鏡像繼承後,父鏡像的ONBUILD被觸發。