语法和c区别_dockerfile语法
上次寫了關(guān)于Dockerfile鏡像精簡之道之后,很多小伙伴找我問,dockerfile語法的一些東西,這邊文章就介紹一下dockerfile語法吧
FROM
FROM是位于我們dockerfile命令的第一層,首先就會(huì)使用該命令。當(dāng)然一個(gè)DokcerFile中存在多個(gè)鏡像時(shí),可以多次使用FROM命令
語法:
FROM /FROM : //tag沒有的話默認(rèn)是latestFROM ubuntuMAINTAINER
可以理解為作者信息和維護(hù)者信息
語法:
MAINTAINER dockeruser MAINTAINER dockeruser dockeruser@gmail.comRUN
用來運(yùn)行我們所需要的指令。該命令是構(gòu)建容器時(shí)運(yùn)行的命令以及提交命令行的結(jié)果,RUN命令是直接跟shell命令,在linux系統(tǒng)中默認(rèn) /bin/sh -C windows中默認(rèn)是 cmd /S /C
語法:
RUN command RUN [“executable”,“param1”,“param2”] #函數(shù)調(diào)用 都一個(gè)參數(shù)類似可執(zhí)行文件,后面是參數(shù) 使用exec 來執(zhí)行的 總的來說命令較長可以使用 來換行。RUN [“/bin/bash”, “-c”, “echo hello”]。RUN apt-get update && apt-get install -y x11vnc xvfb firefoxCMD
CMD是啟動(dòng)容器時(shí)默認(rèn)執(zhí)行的命令。啟動(dòng)容器需要執(zhí)行的參數(shù),并且一個(gè)DockerFile文件中最好只有一個(gè)該命令參數(shù)。多個(gè)話會(huì)把最后一個(gè)作為最終的目標(biāo),參數(shù)執(zhí)行與RUN 運(yùn)行類似。引號(hào)要使用是雙引號(hào),原因是參數(shù)傳遞后docker用來解析為一個(gè)json array
1. CMD ["executable","param1","param2"]2. CMD ["param1","param2"]3. CMD command param1 param2LABEL
構(gòu)建生成的鏡像的元數(shù)據(jù)標(biāo)簽,一個(gè)容器可以有多個(gè)LABEL文件。
例子參考:
LABEL multi.label1="value1" multi.label2="value2" other="value3"EXPOSE
聲明鏡像內(nèi)服務(wù)所需要監(jiān)聽的端口。暴露給外部使用。但是在使用的時(shí)候還需要加上-P 參數(shù)映射或者使用-p映射為指定端口
EXPOSE 22 EXPOSE 22 8080 9292ENV
功能為設(shè)置環(huán)境變量,可以讓其他命令來使用此參數(shù)。并且還有使用docker inspect 查看這個(gè)環(huán)境變量值。
語法 :
1. ENV 2. ENV = ...ENV JAVA_HOME /path/java/src在使用的時(shí)候就可以使用
ADD
復(fù)制命令,將文件復(fù)制到鏡像中去,
語法:
1. ADD ... 2. ADD ["",... ""]其中 src 可以使本地文件也可以是壓縮文件還可以是url ,dest 是容器內(nèi)部的絕對(duì)路徑,也可以是相對(duì)于工作目錄的相對(duì)路徑。
ADD test relativeDir/ ADD test /relativeDirADD http://example.com/foobar /如果是一個(gè)文件夾了,復(fù)制整個(gè)目錄的內(nèi)容,包括文件系統(tǒng)元數(shù)據(jù)
COPY
也是復(fù)制命令,不過該命令只能復(fù)制本地文件。
1. COPY ... 2. COPY ["",... ""]ENTRYPOINT
用來指定鏡像的默認(rèn)入口,也是啟動(dòng)的默認(rèn)命令。
語法:
1. ENTRYPOINT ["executable", "param1", "param2"]2. ENTRYPOINT command param1 param2從命令來看與我們的CMD命令十分的相似,但是他們兩者有不同的區(qū)別。
首先ENTRYPOINT不會(huì)被運(yùn)行的command命令覆蓋,CMD指定的命令會(huì)被覆蓋
如果兩者同時(shí)存在,當(dāng)CMD命令不是一個(gè)完整的執(zhí)行命令時(shí),那么CMD的命令參數(shù)會(huì)被作為ENTRYPOINT的參數(shù),只一個(gè)完整的命令時(shí),誰在最后誰執(zhí)行。
VOLUME
創(chuàng)建數(shù)據(jù)卷的掛載點(diǎn),將容器內(nèi)的文件或者其他容器中的文件掛載在該容器中。
語法:
VOLUME ["目錄"]1. VOLUME ["/home/log/"]2. VOLUME /home/log3. VOLUME /home/log /home/db需要使用數(shù)據(jù)進(jìn)行持久化需要該操作。容器使用的是AUFS文件系統(tǒng)。容器關(guān)閉的時(shí)候數(shù)據(jù)會(huì)丟失,那么數(shù)據(jù)持久化 就需要使用掛載點(diǎn)來操作。還有一點(diǎn)需要注意的是該命令創(chuàng)建的掛載點(diǎn)是無法指定主機(jī)上的目錄,自動(dòng)生成的。
USER
用來指定運(yùn)行容器時(shí)的用戶名或者UID
1. USER daemo2. USER UIDWORKDIR
用來配置工作目錄,對(duì)RUN,CMD,ENTRYPOINT,COPY,ADD生效,如果目錄不存在會(huì)創(chuàng)建,也可以設(shè)置多次。切換目錄的操作相當(dāng)于是Linux系統(tǒng)中的cd
WORKDIR /home/ruiqiWORKDIR dataRUN pwdpwd執(zhí)行的結(jié)果是//home/ruiqi/data當(dāng)然如果存在環(huán)境變量的值也可以 解析環(huán)境變量ENV PATH /pathWORKDIR $PATH/ruiqiRUN pwd pwd 的顯示結(jié)果是/path/ruiqiARG
用來指定一些參數(shù)信息。當(dāng)然該參數(shù)可以被 build時(shí)使用 --build-arg user =asdasda 指定參數(shù)
語法:
ARG name = valueARG user = fruiqiARG passwd =12313ONBUILD
當(dāng)該鏡像作為其他鏡像的基礎(chǔ)鏡像時(shí),所設(shè)定的命令才會(huì)執(zhí)行。
語法:
ONBUILD [INSTRUCTION]比如 ONBUILD RUN lsSTOPSIGNAL
容器退出的信號(hào)值,當(dāng)容器退出的時(shí)候給系統(tǒng)發(fā)送什么樣的指令
STOPSIGNAL signalHEALTHCHECK
進(jìn)行容器的健康檢查。
語法有兩種:
1. HEALTHCHECK [OPTIONS] CMD command2. HEALTHCHECK NONE 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的语法和c区别_dockerfile语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea进入方法快捷键详情大全(idea
- 下一篇: 在成长中遇到的挫折事件对你的影响_多种语