docker file的介紹

      網友投稿 1044 2025-04-05

      DockerFile是一個普通的文本文件,里面包含了許多可以在命令行接口上執行的用來構建鏡像的相關指令,我們通過docker build指令就可以讀取DockerFile文件中的指令并執行自動化鏡像構建。

      一般情況下,Dockerfile文件可分為四個部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時的執行指令,其基本結構如文件1所示。

      文件1 Dockerfile

      1 #定義基礎鏡像信息

      2 FROM ubuntu

      3 # 定義該鏡像的維護者信息

      4 MAINTAINER docker_user docker_user@email.com

      5 # 一些鏡像操作指令

      6 RUN echo “deb http://archive.ubuntu.com/ubuntu/ raring main universe”

      7 >> /etc/apt/sources.list

      8 RUN apt-get update && apt-get install -y nginx

      9 RUN echo “\ndaemon off;” >> /etc/nginx/nginx.conf

      10 # 當容器啟動時要執行的指令

      11 CMD /usr/sbin/nginx

      從文件1可以看出,Dockerfile文件由多條命令語句組成,每條語句都代表一個指令。其中以“#”開頭的指令表示注釋,另外當一條指令過長時,可以使用反斜杠“\”進行指令換行,這樣一條較長的指令就會被分為多行顯示。

      小提示:

      Dockerfile文件是Docker構建鏡像的腳本文件,名字可以自定義,但在構建鏡像時默認使用的是Dockerfile文件。當定義為其他名稱時,在進行鏡像構建時,必須指定該腳本文件的位置和名稱。因此,通常情況下,推薦直接使用默認的Dockerfile進行命名。

      在編寫Dockerfile腳本文件時,開發者根據實際需要會使用到各種指令,如FROM、CMD、ADD等,這些常用指令及其說明如表1所示。

      表1 Dockerfile常用指令

      指令 說明

      FROM 指定基礎鏡像

      MAINTAINER 指定鏡像維護者信息

      RUN 用于執行指定腳本命令

      CMD 指定啟動容器時執行的命令

      EXPOSE 指定容器暴露的端口

      ENV 指定環境變量

      ADD 將文件從宿主機復制到容器指定位置,同時對壓縮文件有自動解壓功能

      COPY 將文件從宿主機復制到容器指定位置

      ENTRYPOINT 設置容器啟動時需要運行的命令

      WORKDIR 為后續的如RUN、CMD、ENTRYPOINT、COPY、ADD指定工作目錄

      在表1中,列舉了Dockerfile文件中的一些常用指令,并分別對其作用進行了簡要說明。為了幫助讀者更好的掌握這些指令的使用,接下來將對這些常用指令的使用進行詳細講解。

      1.FROM

      FROM指令用于初始化一個新的鏡像構建階段,同時為之后的指令設置一個基礎鏡像。設定的基礎鏡像可以從DockerHub鏡像注冊中心或者本地鏡像列表選取,當本地鏡像列表中存在設定的鏡像就會直接使用本地鏡像,否則會先從遠程鏡像注冊中心拉取到本地再使用。

      FROM指令使用的語法格式如下。

      FROM

      FROM :

      具體示例如下。

      FROM ubuntu

      FROM ubuntu:16.04

      在使用FROM指令時,需要注意以下幾點。

      ● 一個有效的Dockerfile文件必須以FROM指令開頭(除了ARG指令);

      ● 為了創建多重鏡像或者互相依賴的鏡像,在同一個Dockerfile文件中可能會出現多個FROM指令;

      ● 參數是可選的,其作用主要是進一步對鏡像區分,例如版本、型號等(如上述示例中的ubuntu:16.04就表示版本號為16.04的ubuntu)。如果沒有使用該參數,則默認是latest;如果設置的參數不存在,則構建鏡像也會失敗。

      2.MAINTAINER

      MAINTAINER指令用于指定當前構建的鏡像維護者信息,該指令沒有具體的格式要求,通常建議使用用戶名和郵箱進行標識,具體示例如下。

      MAINTAINER "shitou"shitou@163.com

      3.RUN

      RUN指令用于執行指定的腳本命令,有兩種格式,其語法格式如下。

      RUN

      RUN [“executable”, “param1”, “param2”]

      前者將在 shell 終端中運行命令,即 /bin/sh -c;后者則使用 exec 執行。指定使用其他終端可以通過第二種方式實現,例如 RUN ["/bin/bash", “-c”, “echo hello”]。

      其中每條 RUN 指令將在當前鏡像基礎上執行指定命令,并提交為新的鏡像。如果要執行多條RUN指令,通常會將多條RUN指令合成一條,并使用斜杠“\” 來換行,這樣將減小所構建的鏡像的體積。

      4.CMD

      CMD指令用于指定啟動容器時執行的命令,該指令有三種格式,其語法格式如下。

      CMD [“executable”,“param1”,“param2”] #使用 exec 執行,也是推薦方式;

      CMD command param1 param2 #在 /bin/sh 中執行,提供給需要交互的應用;

      CMD [“param1”,“param2”] #提供給 ENTRYPOINT 的默認參數;

      需要注意的是,在使用CMD指令時,每個 Dockerfile 只能有一條 CMD 指令,如果有多條CMD指令,則只有最后一條生效。如果用戶啟動容器時指定了運行的指令,則會覆蓋掉CMD指定的指令。

      5.EXPOSE

      EXPOSE指令用于聲明容器內部暴露的端口號,供容器訪問連接使用,其語法格式如下。

      EXPOSE […]

      6.ENV

      ENV指令用于為下文設定一個環境變量,該變量值在后續指令或內聯文件中都可以使用。ENV指令有兩種語法格式,具體如下。

      ENV

      ENV = = …

      在上述兩種語法格式中,第一種格式為一個屬性設置唯一的屬性值,屬性第一個空格之后的所有字符串(包括空格、引號)都將被視為該屬性的值;第二種格式允許同時為多個屬性賦值,而這種方式里面的引號、反斜杠等將被解析掉。

      7.ADD

      ADD指令用于復制指定的 src資源文件到容器中的 dest目錄下,復制的資源可以是文件、目錄以及遠程URLs資源。其語法格式如下。

      ADD …

      在使用ADD指令時,復制的src資源文件必須是當前上下文目錄或其子目錄,而復制的內容實際上是該目錄下的所有內容,其中包括文件系統元數據,而目錄本身不會被復制。當dest目錄不存在時,會在復制文件時自動創建。需要注意的是,當使用ADD指令復制的文件是一個壓縮包時,ADD指令會在復制好該文件后,自動進行解壓。

      在使用ADD指令時,復制的src資源文件路徑允許使用通配符,而dest目標目錄可以使用絕對路徑,也可以使用預先用WORKDIR指令定義的相對路徑。

      8.COPY

      COPY指令的作用與ADD指令類似,都是復制指定的src資源文件到容器中的 dest目錄下。區別在于,COPY指令不能復制遠程URL路徑文件,也不能解壓文件,而ADD指令則可以。其語法格式如下。

      COPY …

      9.ENTRYPOINT

      ENTRYPOINT指令是配置容器啟動后執行的命令,每個Dockerfile中只能有一個ENTRYPOINT,當指定多個ENTRYPOINT指令時,只有最后一個生效。該指令有兩種語法格式,其語法格式如下。

      ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式, 推薦的)

      ENTRYPOINT command param1 param2 (shell 格式)

      10.WORKDIR

      docker file的介紹

      WORKDIR指令用于為后續的指令(如RUN、CMD、ENTRYPOINT、COPY、ADD)指定工作目錄,在同一個Dockerfile文件中可以多次使用WORKDIR指令,其語法格式如下。

      WORKDIR /path/to/workdir

      至此,關于Dockerfile文件中的常用指令已介紹完畢,讀者可以根據自身實際情況選取使用。Dockerfile的更多指令可以參考Dockerfile官網學習,具體地址為https://docs.docker.com/engine/reference/builder/#arg。

      在實際情況下,Docker在讀取應用上下文中的Dockerfile文件進行鏡像構建之前,都會先查看當前應用上下文中是否包含一個名為.dockerignore的文件,如果該文件存在,則Docker會先將.dockerignore文件中聲明的文件或目錄進行排除,然后再讀取Dockerfile進行鏡像構建。使用.dockerignore將有助于在進行文件復制過程中避免向進程中加入過大或者敏感的無用文件和目錄。

      .dockerignore文件同Dockerfile文件一樣,也是一個文本文件。二者的主要區別在于.dockerignore中存放的是被排除的文件,而Dockerfile中存放的是需要執行的指令。

      接下來,通過一個簡單的示例來講解.dockerignore文件內容的編寫,如文件1所示。

      文件1 .dockerignore

      1 # comment

      2 /temp

      3 //temp*

      4 temp?

      在文件1中,第1行代碼表示注釋內容,其余3行代碼均為被排除的文件。從被排除文件的編寫方式可以看出,.dockerignore文件中可以使用通配符排除匹配路徑下的文件。

      下面針對使用通配符排除匹配路徑下的文件進行具體分析。

      ● /temp:排除根目錄下任意子目錄中所有名字以temp開頭的文件或目錄。例如文件/somedir/temporary.txt會被排除。

      ● //temp*:排除根目錄下任意兩級子目錄中所有名字以temp開頭的文件或目錄。例如文件/somedir/subdir/temporary.txt會被排除。

      ● temp?:排除根目錄下名字以temp開頭,后面為任意一個字符的文件或目錄。例如目錄/tempa和/tempb都將被排除。

      小提示:

      在前面幾個小節中,具體介紹了Dockerfile的基本結構和常用指令,讀者想要寫出好的Dockerfile文件就必須對具體的需求、一些shell命令以及注意事項有所了解,這些內容可以通過參考官方文檔學習,其地址https://rock-it.pl/how-to-write-excellent-dockerfiles/。

      Docker 鏡像服務

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:表格篩選后如何讓序號連續(excel里篩選后怎樣保持序號連續)
      下一篇:Java 注解】自定義注解 ( 注解屬性定義與賦值 )
      相關文章
      亚洲精品午夜视频| 激情小说亚洲色图| 亚洲AV无码国产精品永久一区| 亚洲AV无码久久寂寞少妇| 亚洲人AV永久一区二区三区久久| 青青青亚洲精品国产| 亚洲欧美自偷自拍另类视| 亚洲成a人片在线观| 亚洲精品视频观看| 亚洲毛片基地日韩毛片基地| 亚洲日本国产乱码va在线观看| 亚洲精品无码久久久久| 久久亚洲精品视频| 亚洲精品GV天堂无码男同| 国产亚洲精AA在线观看SEE| 久久久久亚洲AV无码去区首| 国产成人亚洲精品电影| 亚洲av综合av一区二区三区 | 亚洲an日韩专区在线| 久久综合九九亚洲一区| 九月丁香婷婷亚洲综合色| 伊人久久综在合线亚洲91| 国产日韩亚洲大尺度高清| 亚洲AV无码成人精品区蜜桃| 亚洲成aⅴ人在线观看| 久久精品国产亚洲AV麻豆王友容| 亚洲AV网站在线观看| 亚洲成人高清在线观看| 亚洲成人免费在线| 久久久久亚洲av无码专区 | 99亚偷拍自图区亚洲| 亚洲Av无码精品色午夜| 人人狠狠综合久久亚洲婷婷| 亚洲中文字幕无码不卡电影| 亚洲色图.com| 91丁香亚洲综合社区| 亚洲乱码卡一卡二卡三| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲国产精品免费视频| 亚洲国产精品嫩草影院在线观看 | 亚洲精品无码中文久久字幕|