Docker基礎:Dockerfile相關知識介紹
?今天給大家整理一下Dockerfile相關的知識,希望對大家能有所幫助!
1、Dockfile介紹
Dockfile是一種可以被Docker解釋的腳本文件,Dockerfile其實由若干條的指令組成,每條指令對應Linux下面的一條腳本命令。Docker應用程序可以將這些指令轉化為Linux實際執行的命令。Docker讀取Dockerfile文件的指令然后生成對應的docker鏡像。通過dockerfile文件可以比較明確的描述出Docker鏡像是如何一步一步構建的。有了Dockerfile,我們可以根據實際的因業務需要構建自己的鏡像并可以添加一些需要執行的命令,這樣可以避免后續的部署工作省去了需要重復敲命令的繁瑣過程,大大節約了項目部署的時間成本
2、Dockerfile命令書寫規則
Dockerfile的指令忽略大小寫,不過建議使用大寫,可以使用#作為指令的注釋,每一行只能表示一條指令,每條指令可以攜帶多個參數。
3、Dockerfile的指令的分類
根據作用可以分為兩種,構建指令和設置指令。?
構建指令:用于構建Docker鏡像,其指定的操作不會在運行image的容器上執行,屬于鏡像的構建過程。。
設置指令:用于設置Docker鏡像的屬性,其指定的操作會在運行鏡像的容器中執行。
4、Dockerfile指令組成
4.1 From(指定基礎鏡像)
Dockerfile必須指定FROM ,并且是第一行,屬于構建命令。
表示基于那個基礎鏡像來構建
基礎鏡像可以是本地鏡像也可以是遠程倉庫的鏡像
語法: FROM image name
4.2 MAINTAINER(指定鏡像作者信息)
用來指定構建鏡像的作者信息,方便后續通過docker inspect命令查看,對鏡像沒有實際的影響。
語法: MAINTAINER author name
4.3 RUN (指定需要執行的shell命令)
該命令會在新創建的鏡像上添加新的層面。docker build 時運行。
格式:RUN command命令
4.4 CMD(設置容器啟動時執行的操作)
可以是執行自定義腳本,也可以是執行系統命令,該指令只能在文件中存在一次,如果有多個,則只會執行最后一條。docker run時運行。
格式: CMD ["executable","param1","param2"] 或 CMD ["param1","param2"]
4.5 ENTRYPOINT(設置容器啟動時執行的操作)
設置指令,指定容器啟動時執行的命令,可以追加命令,但是只有最后一個ENTRYPOINT有效。
格式: ENTRYPOINT ["executable", "param1","param2"]
4.6 USER(設置容器執行shell命令的用戶)
設置指令,設置啟動該容器的用戶,默認是root用戶。
格式:USER root
4.7 EXPOSE(宿主和容器端口映射設置)
指定容器需要映射到宿主機器的端口。
格式: EXPOSE port
4.8 ENV(設置環境變量)
ENV指令可以用于為docker容器設置環境變量。
示例:ENV JAVA/HOME /usr/local/jdk1.8.0.25 指定java環境變量
4.9 ADD(文件復制命令)
復制文件命令,支持自動下載和解壓
格式:ADD 源路徑 目標路徑
優點:在執行 <源文件> 為 tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動復制并解壓到 <目標路徑>。
缺點:在不解壓的前提下,無法復制 tar 壓縮文件。會令鏡像構建緩存失效,從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。
說明:參數:destination 是容器內的路徑。source 可以是 下載文件的URL 或者宿主主機的目錄
4.10 COPY
類似ADD命令,將地文件拷貝到鏡像中
本地目錄為源目錄時,官方推薦使用COPY。
4.11 VOLUME (指定掛載點)
創建一個可以從本地主機或其他容器掛載的掛載點,用來存放數據庫和需要保持的數據等
4.12 WORKDIR(設置工作目錄)
指定RUN、CMD與ENTRYPOINT 命令的工作目錄。
格式: WORKDIR /path/to/workdir
5、完整的Dockerfile示例
5.1 創建mytomcat文件
5.2 構建鏡像
注意:docker build 命令最后要有一個.
5.3 運行鏡像?