Dockerfile是一個(gè)文本格式的配置文件,用戶可以使用Dockerfile來快速創(chuàng)建自定義的鏡像。
1.基本結(jié)構(gòu)
Dockerfile由一行行命令語句組成,并且支持以#開頭的注釋行。一般而言,Dockerfile主體內(nèi)容分為四部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令和容器啟動(dòng)時(shí)執(zhí)行指令。
示例:






2.指令說明
Dockerfile中指令的一般格式為INSTRUCTION arguments,包括“配置指令”(配置鏡像信息)和“操作指令”(具體執(zhí)行操作)

2.1ARG
定義創(chuàng)建鏡像過程中使用的變量。格式為ARG <name>[=<default value>]。在執(zhí)行docker build時(shí),可以通過-build-arg[=]來為變量賦值。當(dāng)鏡像編譯成功后,ARG指定的變量將不再存在(ENV指定的變量將在鏡像中保留)。Docker內(nèi)置了一些鏡像創(chuàng)建變量,用戶可以直接使用而無須聲明,包括(不區(qū)分大小寫)HTTP_PROXY、HTTPS_PROXY、FTP_PROXY、NO_PROXY。
2.2FROM
指定所創(chuàng)建鏡像的基礎(chǔ)鏡像。格式為FROM <image> [AS <name>]或FROM <image>:<tag> [AS <name>]或FROM<image>@<digest> [AS <name>]。任何Dockerfile中第一條指令必須為FROM指令。并且,如果在同一個(gè)Dockerfile中創(chuàng)建多個(gè)鏡像時(shí),可以使用多個(gè)FROM指令(每個(gè)鏡像一次)。為了保證鏡像精簡,可以選用體積較小的鏡像如Alpine或Debian作為基礎(chǔ)鏡像。例如:

2.3LABEL
其實(shí)就是一個(gè)輔助信息,算是備注或注釋吧

2.4EXPOSE
可以暴露多個(gè)端口

2.5ENV

2.6ENTRYPOINT
關(guān)于entrypoint與cmd命令,我不太懂怎么使用,于是找到了這樣的帖子講的還是比較易懂的:https://yeasy.gitbook.io/docker_practice/image/dockerfile/entrypoint

2.7VOLUME
創(chuàng)建一個(gè)數(shù)據(jù)卷掛載點(diǎn)。格式為VOLUME ["/data"]。運(yùn)行容器時(shí)可以從本地主機(jī)或其他容器掛載數(shù)據(jù)卷,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。
2.8USER

2.9WORKDIR

2.10 ONBUILD


2.11 STOPSIGNAL

2.12 HEALTHCHECK

2.13 SHELL

3.操作指令
3.1 RUN

3.2 CMD

3.3 ADD

3.4 COPY
復(fù)制內(nèi)容到鏡像。格式為COPY <src> <dest>。復(fù)制本地主機(jī)的<src>(為Dockerfile所在目錄的相對路徑,文件或目錄)下內(nèi)容到鏡像中的<dest>。目標(biāo)路徑不存在時(shí),會(huì)自動(dòng)創(chuàng)建。路徑同樣支持正則格式。COPY與ADD指令功能類似,當(dāng)使用本地目錄為源目錄時(shí),推薦使用COPY。
4.創(chuàng)建鏡像
編寫完成Dockerfile之后,可以通過docker [image] build命令來創(chuàng)建鏡像?;镜母袷綖閐ocker build [OPTIONS] PATH | URL | -。
該命令將讀取指定路徑下(包括子目錄)的Dockerfile,并將該路徑下所有數(shù)據(jù)作為上下文(Context)發(fā)送給Docker服務(wù)端。Docker服務(wù)端在校驗(yàn)Dockerfile格式通過后,逐條執(zhí)行其中定義的指令,碰到ADD、COPY和RUN指令會(huì)生成一層新的鏡像。最終如果創(chuàng)建鏡像成功,會(huì)返回最終鏡像的ID。
如果上下文過大,會(huì)導(dǎo)致發(fā)送大量數(shù)據(jù)給服務(wù)端,延緩創(chuàng)建過程。因此除非是生成鏡像所必需的文件,不然不要放到上下文路徑下。如果使用非上下文路徑下的Dockerfile,可以通過-f選項(xiàng)來指定其路徑。
要指定生成鏡像的標(biāo)簽信息,可以通過-t選項(xiàng)。該選項(xiàng)可以重復(fù)使用多次為鏡像一次添加多個(gè)名稱。例如,上下文路徑為/tmp/docker_builder/,并且希望生成鏡像標(biāo)簽為builder/first_image:1.0.0,可以使用下面的命令:

4.1命令選項(xiàng)


4.2選擇父鏡像


4.3使用.dockerignore文件


4.4多步驟創(chuàng)建



5.創(chuàng)建dokcerFile 規(guī)范

