Dockerfile是一個文本格式的配置文件闽瓢,用戶可以使用Dockerfile來快速創(chuàng)建自定義的鏡像埃跷。
1.基本結(jié)構(gòu)
Dockerfile由一行行命令語句組成迁沫,并且支持以#開頭的注釋行。一般而言捌蚊,Dockerfile主體內(nèi)容分為四部分:基礎(chǔ)鏡像信息集畅、維護(hù)者信息、鏡像操作指令和容器啟動時執(zhí)行指令缅糟。
示例:
2.指令說明
Dockerfile中指令的一般格式為INSTRUCTION arguments挺智,包括“配置指令”(配置鏡像信息)和“操作指令”(具體執(zhí)行操作)
2.1ARG
定義創(chuàng)建鏡像過程中使用的變量。格式為ARG <name>[=<default value>]窗宦。在執(zhí)行docker build時赦颇,可以通過-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指令定踱。并且棍潘,如果在同一個Dockerfile中創(chuàng)建多個鏡像時,可以使用多個FROM指令(每個鏡像一次)崖媚。為了保證鏡像精簡亦歉,可以選用體積較小的鏡像如Alpine或Debian作為基礎(chǔ)鏡像。例如:
2.3LABEL
其實(shí)就是一個輔助信息畅哑,算是備注或注釋吧
2.4EXPOSE
可以暴露多個端口
2.5ENV
2.6ENTRYPOINT
關(guān)于entrypoint與cmd命令肴楷,我不太懂怎么使用,于是找到了這樣的帖子講的還是比較易懂的:https://yeasy.gitbook.io/docker_practice/image/dockerfile/entrypoint
2.7VOLUME
創(chuàng)建一個數(shù)據(jù)卷掛載點(diǎn)敢课。格式為VOLUME ["/data"]。運(yùn)行容器時可以從本地主機(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)路徑不存在時齿诉,會自動創(chuàng)建筝野。路徑同樣支持正則格式。COPY與ADD指令功能類似粤剧,當(dāng)使用本地目錄為源目錄時歇竟,推薦使用COPY。
4.創(chuàng)建鏡像
編寫完成Dockerfile之后抵恋,可以通過docker [image] build命令來創(chuàng)建鏡像焕议。基本的格式為docker build [OPTIONS] PATH | URL | -弧关。
該命令將讀取指定路徑下(包括子目錄)的Dockerfile盅安,并將該路徑下所有數(shù)據(jù)作為上下文(Context)發(fā)送給Docker服務(wù)端唤锉。Docker服務(wù)端在校驗(yàn)Dockerfile格式通過后,逐條執(zhí)行其中定義的指令别瞭,碰到ADD窿祥、COPY和RUN指令會生成一層新的鏡像。最終如果創(chuàng)建鏡像成功蝙寨,會返回最終鏡像的ID晒衩。
如果上下文過大,會導(dǎo)致發(fā)送大量數(shù)據(jù)給服務(wù)端籽慢,延緩創(chuàng)建過程浸遗。因此除非是生成鏡像所必需的文件,不然不要放到上下文路徑下箱亿。如果使用非上下文路徑下的Dockerfile跛锌,可以通過-f選項(xiàng)來指定其路徑。
要指定生成鏡像的標(biāo)簽信息届惋,可以通過-t選項(xiàng)髓帽。該選項(xiàng)可以重復(fù)使用多次為鏡像一次添加多個名稱。例如脑豹,上下文路徑為/tmp/docker_builder/郑藏,并且希望生成鏡像標(biāo)簽為builder/first_image:1.0.0,可以使用下面的命令: