dockerfile指令介紹

2021-09-20 15:56:51 字數 2173 閱讀 9105

dockerfile指令:cmd,entrypoint,add,copy,volume,workdir,user,onbuild,env等

1.cmd:用於指定乙個容器啟動時要執行的命令。類似於run指令,只是run指令是指定映象被構建時的命令,而cmd是指容器被啟動時要執行的命令

docker run -i -t zhoufujin/apache  /bin/true 和  cmd ["/bin/true"] 等效

這裡需要注意:使用docker run命令可以覆蓋cmd指令。如果我們在dockerfile中指定了cmd指令,同時在docker run中也指定了要執行的命令。命令列中的命令會覆蓋dockerfile中的cmd指令

在dockerfile中只能指定一條cmd指令。如果指定了多條cmd指令,也只有最後一條cmd指令會被使用。如果想在啟動容器時執行多個程序或多條命令,可以考慮使用類似的supervisor的服務管理工具。

2.entrypoint :entrypoin指令提供的命令不容易在啟動容器時被覆蓋。實際上,在docker run命令列中指定的任何引數都會被當做引數再次傳遞給entrypoin指定中指定的命令。

entrypoint ["/usr/sbin/nginx", "-g" "daemon off;"]

如果需要,我們可以在執行時通過docker run的--entrypoint標誌覆蓋entrypoint指令

3.workdir:用來在從映象建立乙個新容器時,在容器內部設定乙個工作目錄。entrypoint,cmd指定的程式都會 在這個目錄中執行。

可以通過-w 標誌在執行時覆蓋工作目錄

4.env:用來設定在映象構建過程中的環境變數

workdir $target_dir

也可以使用docker run命令列中的 -e標誌來傳遞環境變數

5.user:用來指定該映象以什麼樣的使用者去執行

也可以在docker run 中通過-u選項來覆蓋指定指令的值。

6.volume:用來向基於映象建立的容器新增卷。

卷功能,可以讓我們將資料(如源**),資料庫或者其他內容新增到映象中,而不是將這些內容提交到映象彙總,並且執行我們在多個容器中共享

這些內容

例:volume ["/opt/project"] 這條指令將會為基於此映象建立的任何容器建立乙個名為/opt/project的掛載點、

7.add:用來將構建環境下的檔案和目錄複製到映象中。

不能對構建目錄或者上下文之外的檔案進行操作

add software.lic /opt/project/software.lic 這裡的add指令會將構建目錄下的software.lic複製到映象中的/opt/project/software.lic

在add檔案時,docker通過目的位址引數末尾的字元來判斷檔案源是目錄還是檔案。如果以/結尾就是目錄,如果不是就是檔案!

值得一提的乙個add功能:如果將乙個歸檔檔案(gzip,bzip2,xz)指定為原始檔,docker將會自動將歸檔檔案解開

如:add latest.tar.gz /var/www/wordpress/ 

這條命令會將歸檔檔案latest.tar.gz解開到/var/www/wordpress/ 中。如果目的位置不存在的話,docker將會為我們建立這個全路徑,新建立的而檔案和目錄的模式為0755,並且uid和gid都是0.

8.copy:類似於add,他們的根本不同是copy 只關心在結構上下文中複製本地檔案,而不會去做檔案提取和解壓的工作。

例:copy conf.d/ /etc/apache2/ 這條指令將會將本地conf.d目錄 中的檔案複製到/etc/apache2/

這裡注意:檔案路徑必須是乙個與當前構建環境相對應的檔案或者目錄,本地檔案都放到和dockerfile同乙個目錄下。copy指令的目的位置必須是容器內的乙個絕對路徑。

任何由該指令建立的檔案或者目錄的uid和gid都會設定為0.

如果原始檔是乙個目錄,那麼這個目錄將整個被複製到容器中,包括檔案系統元資料。如果原始檔為任何型別的檔案,則該檔案會隨同元資料一起被複製。如果目的位置不存在,docker將會自動建立所有需要的目錄結構。

9:onbuild:為映象新增觸發器。當乙個映象被用作其他映象的基礎映象時,改映象中的觸發器將被執行。

觸發器可以是任何構建指令

onbuild 觸發器會按照在父映象中指定的順序執行,並且只能被繼承一次(也就是只能在子映象中執行,而不會再孫子映象中執行)

Dockerfile 指令 VOLUME 介紹

在介紹volume指令之前,我們來看下如下場景需求 1 容器是基於映象建立的,最後的容器檔案系統包括映象的唯讀層 可寫層,容器中的程序操作的資料持久化都是儲存在容器的可寫層上。一旦容器刪除後,這些資料就沒了,除非我們人工備份下來 或者基於容器建立新的映象 能否可以讓容器程序持久化的資料儲存在主機上呢...

DockerFile 指令命令介紹

2 示例 arg version latest from busybox version arg version run echo version image version from 或from 或from 注意 任何dockerfile中的第一條指令必須為from指令,並且,如果在同乙個dock...

Dockerfile介紹與指令解析

映象是容器的基礎,每次執行docker run的時候都會指定哪個映象作為容器執行的基礎。我們之前的例子都是使用來自docker hub的映象,直接使用這些映象只能滿足一定的需求,當映象無法滿足我們的需求時,就得自定製這些映象。映象的定製就是定製每一層所新增的配置 檔案。如果可以把每一層修改 安裝 構...