docker 並不建議使用者通過commit方式構建映象。原因如下:
用dockerfile構建映象,底層也docker commit 一層一層構建新映象的。
1.執行docker build命令,-t將新映象命名,末尾的.指名build context為當前目錄,從當前目錄下尋找dockerfile,也可以用-f指定dockerfile的位置。
2.首先docker將build context中的所有檔案傳送給docker daemon。build context為映象構建提供所需要的檔案或目錄。dockerfile中的add,copy等命令可以將build context中的檔案新增到映象。、
檢視映象分層結構
docker history會顯示映象的構建歷史。
docker history centos-yum:latest
映象的快取特性
docker會快取已有映象的映象層,構建新映象時,如果某映象層已經存在,就直接使用,無需重新建立。
如果我們希望在構建映象時不使用快取,可以在docker build命令中加上–no-cache引數。dockerfile中每乙個指令都會建立乙個映象層,上層依賴於下層,只要某一層發生變化,其上面的快取都會失效。
from
功能為指定基礎映象,並且必須是第一條指令,如果不以任何為映象,那麼寫法為:from scratch。
from
from :
from :
from centos7
run
為執行指定的命令,有兩種格式:(構建是就執行的命令)
1:run 後面直接跟shell命令,linux中預設 /bin/sh -c
2:run[「executable」,「param1」,「param2」] executable為可執行檔案,後面是引數
run ["/bin/bash","-c","echo hello"]注意:多行命令不要寫多個run,建議使用換行符
cmd
容器啟動時要執行的命令
1.cmd [「executable」,「param1」,「param2」]
2.cmd [「param1」,「param2」]
3.cmd command param1 param2
cmd ["ls,"/tmp"]
注意:必須要用雙引號
label
為映象指定標籤
label =…
如果有很多建議寫到一行,用換行符 \
label com.example.vendor="huhuhuhuhu" \
com.example.vendor2="huhuhuhuhuhuhuhuhuhuh"
label會繼承基礎映象的label,若key相同,則覆蓋
maintainer
指定作者
maintainer huge
expose
開放埠,必須在容器啟動的時候加上-p引數
expose 80
env
設定環境變數
env 變數=引數 (可以一次設定多個)
env ip=www.ip.com
add
複製命令,將檔案複製到映象中。
並且如果複製的是乙個包檔案,會將其自動解包
add text.txt /tmp
add /tmp
源位址 目標位址
copy
copy text.txt /tmp
不支援url,
entrypoint
啟動時的預設命令
entrypoint [「executable」,「param1」,「param2」]
entrypoint command param1 param2
entrypoint ["ls","/tmp"]
也可以不加檔案或目錄
entrypoint ["ls"]
在容器啟動時後面加上可執行檔案
docker run -it centos-yum:latest /tmp
與cmd一起使用時:可以檢視cmd指定的檔案或目錄
cmd ["/etc","/"]
entrypoint ["ls"]
如果我們同時寫了cmd與entrypoint,並且都是完整指令,那麼會覆蓋,誰在後面誰生效
user
設定啟動容器的使用者
user daemo
user uid
user www
注意:如果設定了容器以daemon使用者去執行,那麼run,cmd,和entrypoint都會以這個使用者去執行
workdir
設定工作目錄
workdir /www
對run,entrypoint,copy,add生效。
如果不存在則會建立,也可以設定多次
workdir /a
workdir /b
workdir /c
run pwd
執行結果是 /a/b/c
workdir也可以解析環境變數
env dir /path
workdir $dir
arg
arg 設定變數命令,arg定義了乙個變數,在docker build建立的時候,使用 --build-arg =來指定引數
也可以給乙個預設值
arg user1="www"
onbuild
onbuild [instruction]
只對當前的子映象生效
onbuild run touch 1.txt
stopsignal
當容器退出時傳送乙個什麼樣的指定給系統
healthcheck
容器健康狀況檢查:
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秒 Dockerfile檔案用法
場景 根據業務需求以及個人使用習慣,大部分執行的容器使用的映象,均需要自己去編譯映象。from 基礎映象 maintainer 維護者的記錄資訊 run 執行shell命令,盡量執行在同一映象層,減少構建映象層數 add 複製檔案指令。它有兩個引數和。該命令將複製指定的 到容器中的 其中 可以是do...
Dockerfile基本結構
1.dockerfile是乙個文字格式的配置檔案,使用者可以使用dockerfile快速建立自定義的映象。2.dockerfile檔案分為四個部分 a.基礎映象資訊 在dockerfile中使用 完成一行的註解 第一行必須制定基礎映象 from centos b.維護者資訊 維護者資訊 mainta...
Dockerfile用法全解析
1 dockerfile中的內容如下 from alpine copy src run echo 321 1.txt cmd tail f 1.txt 或者cmd cat 1.txt或者cmd cat 1.txt 2 在命令列輸入 t表示構建成的映象名字是 test,指定版本就是test lates...