Docker使用Dockerfile建立映象

2022-09-12 21:57:32 字數 3579 閱讀 1706

dockerfile是乙個文字格式的配置檔案,使用者可以使用dockerfile來快速建立自定義的映象。

它是由多行命令組成,支援以#開頭的注釋行

定義建立映象過程中使用的變數

arg [=]
再執行docker build時,可以通過-duild-arg[=]來為變數賦值;映象編譯成功之後,arg指定的變數不再存在(env指定的仍然在映象中保留)

docker內建了一些映象建立變數,使用者可以直接使用而無需宣告,包括(不區分大小寫)http+proxy https_proxy ftp_proxy no-proxy

指定建立映象使用的基礎映象

from [as ]

或者from :[as ]

或者from @[as ]

dockerfile的第一條命令必須為from指令,如果同乙個dockerfile檔案建立多個映象的時候,可以使用多個映象(每個映象一次)

新增元資料標籤資訊,用來映象以後被搜尋的時候用

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"]執行指定的命令

run 或者

run ["executable","param1","param2"]

前者預設使用shell終端執行,後者使用exec執行,不啟動shell環境

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

cmd command param1 param2

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

或者cmd ["param1","param2"] 提供給entrypoint的預設引數

每個dockerfile中只能有一條cmd命令,如果指定了多條命令,只有最後一條被執行

如果使用者啟動容器時手動指定了執行的命令(作為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...