dockerfile是乙個文字格式的配置檔案,使用者可以使用dockerfile來快速建立自定義的映象。
它是由多行命令組成,支援以#開頭的注釋行
定義建立映象過程中使用的變數
arg [=]
再執行docker build
時,可以通過-duild-arg[=]
來為變數賦值;映象編譯成功之後,arg指定的變數不再存在(env指定的仍然在映象中保留)
docker內建了一些映象建立變數,使用者可以直接使用而無需宣告,包括(不區分大小寫)http+proxy https_proxy ftp_proxy no-proxy
指定建立映象使用的基礎映象
dockerfile的第一條命令必須為from指令,如果同乙個dockerfile檔案建立多個映象的時候,可以使用多個映象(每個映象一次)from [as ]
或者from :[as ]
或者from @[as ]
新增元資料標籤資訊,用來映象以後被搜尋的時候用
label ==...
宣告映象內服務的監聽埠,執行容器的時候-p
指令就是根據這個配置來自動對映埠的
expose [/...]
這個指令只是起到宣告的作用,並不會自動完成埠對映
環境變數,容器建立成功仍然存在
這些環境變數可以在執行時被env 或
env =...
docker run --env =
覆蓋掉
有個需要注意的點,看下這個例子:
最後的結果為env key1=value1
env key1=value2 key2=$
key1=value2 key2=value1
,因為同一條env語句中同時進行賦值
映象入口命令,這個命令會在啟動容器時作為根命令執行
支援兩種結構:
所有傳入值作為該命令的引數.可以這麼理解:你# 這個是在`exec`呼叫時執行
entrypoint ["executable","param1","param2"]
# 這個是在`shell`中執行
entrypoint command param1 param2
docker run
映象名後面的字串,都無腦用空格拼裝在這些命令後面
建立乙個匿名的資料卷掛載點,可以在執行時被覆蓋
volume ["/data"]
指定執行容器時的使用者名稱或uid,後續的run命令也會使用指定的使用者身份
user daemon
當服務不需要管理員許可權時,可以通過該命令指定執行使用者
為後續的run
,cmd
,entrypoint
配置工作目錄
workdir /workdir
使用相對指令會和之前的workdir指令進行拼裝,所以推薦只使用絕對路徑
基於生成的映象再次生成子映象的時候,自動執行的操作命令
其他dockerfile使用from引用生成的映象的時候會先執行映象中的onbuild語句
onbuild [instruction]
指定所建立映象啟動的容器接收退出的訊號值:
stopsignal signal
配置所啟動容器如何進行安全檢查
支援的引數有:# 禁用映象安全檢查
healthcheck none
# 配置安全檢查的命令
healthcheck [options] cmd command
指定其他命令使用shell是的預設shell型別
shell ["executable","parameters"]
預設值為["/bin/sh","-c"]
執行指定的命令
前者預設使用shell終端執行,後者使用exec執行,不啟動shell環境run 或者
run ["executable","param1","param2"]
指定啟動容器時預設執行的命令
每個dockerfile中只能有一條cmd命令,如果指定了多條命令,只有最後一條被執行cmd command param1 param2
或者cmd ["executable","param1","param2"]
或者cmd ["param1","param2"] 提供給entrypoint的預設引數
如果使用者啟動容器時手動指定了執行的命令(作為run命令的引數),則會覆蓋掉cmd指定的命令
新增內容到映象
add
複製src內容到容器內的dest路徑
其中src可以是dockerfile所在目錄的乙個相對路徑(檔案或目錄);也可以是乙個url;還可以是乙個tar 檔案(自動解壓為目錄);dest可以是映象內絕對路徑,或者相 對於工作目錄(work.dir)的相對路徑。
複製內容到映象
copy
src為本地主機dockerfile所在目錄的相對路徑;dest為內向內絕對路徑,路徑不存在的時候,會自動建立
當使用本地目錄為源目錄時,推薦使用 copy。
編寫完dockerfile以後,通過命令建立映象
$ docker build [options] path | url | -
該命令讀取指定路徑下的dockerfile,並將該路徑下所有資料作為上下文傳送給docker服務端,docker服務端在校驗dockerfile格式通過後,逐條執行其中的命令,碰到add copy run 指令會生成一層新的映象,如果最終建立映象成功,返回最終映象的id
如果上下文過大,會傳送大量資料到服務端,因此除非是生成映象必須的檔案,不要放在上下文路徑;可以使用-f
顯式指定上下文路徑
用-t
為映象新增名稱,可以多次使用
例如
$ docker build -t builder/first_image :1.0.1 /tmp/docker_builder/
和.gitignore
檔案類似,可以在上下文目錄新增規則檔案,將目錄中無用的檔案避免提交到服務端
例如
*/temp*
*/*/t
emp*
tmp?
基於python開發環境的Dockerfile總結
在本地建立乙個管理docker的目錄 macosx 系統下的 mkdir p mywork docker python 其他作業系統平台自定義管理目錄,這裡省略python開發環境的dockerfile from ubuntu 不指定版本預設使用最新版本 maintainer keithl 更改配置...
《Docker的使用》 二 Docker基本使用
1 建立並執行乙個互動式容器 docker run name my ubuntu it ubuntu bin bash name 指定乙個容器名字,如果不加 name則由docker隨機分配乙個容器名字 合法名字只能包含 大小寫字母,數字,下劃線,圓點,橫線 i t i 保持標準輸入的開啟 t 給容...
Docker 使用Docker部署Node服務
docker 是乙個開源的容器引擎。開發者可以將自己的應用以及依賴打包為乙個可移植的容器,然後發布到 linux 機器上。它類似於乙個輕量級的虛擬機器,極大地方便了使用者在伺服器端部署和管理應用環境。apt install docker.io安裝成功後檢視docker版本 建立package.jso...