Dockfile基本語法

2021-09-29 08:08:38 字數 3693 閱讀 4721

from

功能為指定基礎映象,並且必須是第一條指令。 如果不以任何映象為基礎,那麼可寫為:from scratch。

接下來所寫的指令將作為映象的第一層開始。

格式:

from from :from :
預設值為latest

maintainer

指定作者

格式:

maintainer
env

為容器設定環境變數

env 設定乙個

env =設定多個

add

複製,把檔案複製到映象中(dockfile所在目錄為根目錄),類似於scp

add ... add ["",... ""]
路徑的填寫可以是容器內的絕對路徑,也可以是相對於工作目錄的相對路徑

可以是乙個本地檔案或者是乙個本地壓縮檔案,還可以是乙個url

如果把寫成乙個url,那麼add就類似於wget命令

寫法:

add ares t1/ 

add ares /t1

add /

若src是個目錄,則會把目錄下所有檔案複製到容器,不會複製目錄

copy

複製命令

copy ... copy ["",... ""]
copy的只能是本地檔案,其他用法與add一致

volume

掛載功能,將本地目錄或者其他容器內得目錄掛在到這個容器中,一般掛載資料檔案

volume ["/var/log/"]

volume /var/log

volume /var/log /data

任何向 /data 中寫入的資訊都不會記錄進容器儲存層,從而保證了容器儲存層的無狀態化,容器執行時可通過-v覆蓋配置

user

設定啟動容器的使用者,可以是使用者名稱或uid

user daemo

user uid

如果設定了容器以daemon使用者去執行,那麼run, cmd 和 entrypoint 都會以這個使用者去執行

workdir

workdir 指令可以來指定工作目錄(或者稱為當前目錄),以後各層的當前目錄就被改為指定的目錄,如該目錄不存在, workdir 會自動建立目錄。

workdir 《工作目錄路徑》
expose

宣告埠,暴漏容器執行時的監聽埠給外部

expose 《埠1> [《埠2>...]
執行時並不會因為這個宣告應用就會開啟這個埠的服務.在 dockerfile 中寫入這樣的宣告有兩個好處,乙個是幫助映象使用者理解這個映象服務的守護埠,以方便配置對映;另乙個用處則是在執行時使用隨機埠對映時,也就是 docker run -p 時,會自動隨機對映 expose 的埠。

run執行指定的命令

run run ["executable", "param1", "param2"]
第一種後邊直接跟shell命令

在linux作業系統上預設 /bin/sh -c

在windows作業系統上預設 cmd /s /c

第二種是類似於函式呼叫。

run書寫時的換行符是\,多行命令不要寫多個run,使用&&連線

cmd容器啟動時要執行的命令

cmd ["executable","param1","param2"]

cmd ["param1","param2"]

cmd command param1 param2

只可以使用雙引號!

cmd echo $home實際會被翻譯成cmd [ "sh", "-c", "echo $home" ]
docker 不是虛擬機器,容器中的應用都應該以前臺執行!

cmd service nginx start命令應該寫為cmd ["nginx", "-g", "daemon off;"]
run是構件容器時就執行的命令以及提交執行結果;

cmd是容器啟動時執行的命令,在構件時並不執行,構件時緊緊指定了這個命令到底是個什麼樣子;

可寫多個,只有最後乙個生效

entrypoint

功能是啟動時的預設命令,不可被 docker run 提供的引數覆蓋

entrypoint ["executable", "param1", "param2"]

entrypoint command param1 param2

如果我們在dockerfile種同時寫了entrypoint和cmd,並且cmd指令不是乙個完整的可執行命令,那麼cmd指定的內容將會作為entrypoint的引數

示例:

cmd ["-f","/var/log/message"]

entrypoint ["tail"]

會在啟動的時候執行tail -f /var/log/message

arg

構建引數

arg 《引數名》[=《預設值》]
arg命令定義了乙個變數,在docker build建立映象的時候,使用 –build-arg =來指定引數

onbuild

onbuild 《其它指令》
onbuild 是乙個特殊的指令,它後面跟的是其它指令,比如 run , copy 等,而這些指令,在當前映象構建時並不會被執行。只有當以當前映象為基礎映象,去構建下一級映象的時候才會被執行。

stopsignal

當容器推出時給系統傳送什麼樣的指令

stopsignal signal
healthcheck

容器健康狀況檢查命令,告訴 docker 應該如何進行判斷容器的狀態是否正常

healthcheck [options] cmd command :設定檢查容器健康狀況的命令

healthcheck none :如果基礎映象有健康檢查指令,使用這行可以遮蔽掉其健康檢查指令

[options]的選項支援以下三中選項:

--interval=duration 兩次檢查預設的時間間隔,預設為30秒

--timeout=duration 健康檢查命令執行超時時長,預設30秒

--retries=n 當連續失敗指定次數後,則容器被認為是不健康的,狀態unhealthy,預設次數是3

healthcheck 只可以出現一次,如果寫了多個,只有最後乙個生效。

cmd後邊的命令的返回值決定了本次健康檢查是否成功,具體的返回值如下:

0: success - 表示容器是健康的

1: unhealthy - 表示容器已經不能工作了

2: reserved - 保留值

示例:

healthcheck --interval=5m --timeout=3s \

cmd curl -f http://localhost/ || exit 1

健康檢查命令是:curl -f http://localhost/ || exit 1

兩次檢查的間隔時間是5秒

命令超時時間為3秒

Dockfile語法講解

fromfrom scratch 製作base image from centos 使用base image from ubuntu 14.04label 定義容器的metadata label maintainer hello mail.com label version 1.0 label de...

Dockfile檔案解析

from centos maintainer zzyy126.com 把宿主機當前上下文的c.txt拷貝到容器 usr local 路徑下 copyc.txt usr local cincontainer.txt 把j a與tomcat新增到容器中 addjdk 8u171 linux x64.ta...

docker學習 Dockfile詳解

dockfile是乙個用於編寫docker映象生成過程的檔案,其有特定的語法。在乙個資料夾中,如果有乙個名字為dockfile的檔案,其內容滿足語法要求,在這個資料夾路徑下執行命令 docker build tag name tag 就可以按照描述構建乙個映象了。name是映象的名稱,tag是映象的...