1.基本說明
Dockfile是一個(gè)用于編寫docker鏡像生成過程的文件,其有特定的語法份名。在一個(gè)文件夾中碟联,如果有一個(gè)名字為Dockfile的文件,其內(nèi)容滿足語法要求僵腺,在這個(gè)文件夾路徑下執(zhí)行命令:docker build --tag name:tag .鲤孵,就可以按照描述構(gòu)建一個(gè)鏡像了。name是鏡像的名稱辰如,tag是鏡像的版本或者是標(biāo)簽號(hào)普监,不寫就是lastest。注意后面有一個(gè)空格和點(diǎn)琉兜。
2.Dockfile語法
Dockerfile的基本指令有十三個(gè)凯正,分別是:FROM、MAINTAINER豌蟋、RUN廊散、CMD、EXPOSE梧疲、ENV允睹、ADD、COPY幌氮、ENTRYPOINT缭受、VOLUME、USER该互、WORKDIR米者、ONBUILD。下面對(duì)這些指令的用法一一說明宇智。
2.1 FROM
用法:FROM <image>
說明:第一個(gè)指令必須是FROM了蔓搞,其指定一個(gè)構(gòu)建鏡像的基礎(chǔ)源鏡像,如果本地沒有就會(huì)從公共庫中拉取随橘,沒有指定鏡像的標(biāo)簽會(huì)使用默認(rèn)的latest標(biāo)簽喂分,可以出現(xiàn)多次,如果需要在一個(gè)Dockerfile中構(gòu)建多個(gè)鏡像太防。
2.2 MAINTAINER
用法:MAINTAINER <name> <email>
說明:描述鏡像的創(chuàng)建者,名稱和郵箱
2.3 RUN
用法:RUN "command" "param1" "param2"
說明:RUN命令是一個(gè)常用的命令,執(zhí)行完成之后會(huì)成為一個(gè)新的鏡像蜒车,這里也是指鏡像的分層構(gòu)建讳嘱。一句RUN就是一層,也相當(dāng)于一個(gè)版本酿愧。這就是之前說的緩存的原理沥潭。我們知道docker是鏡像層是只讀的,所以你如果第一句安裝了軟件嬉挡,用完在后面一句刪除是不可能的钝鸽。所以這種情況要在一句RUN命令中完成,可以通過&符號(hào)連接多個(gè)RUN語句庞钢。RUN后面的必須是雙引號(hào)不能是單引號(hào)(沒引號(hào)貌似也不要緊)拔恰,command是不會(huì)調(diào)用shell的,所以也不會(huì)繼承相應(yīng)變量基括,要查看輸入RUN "sh" "-c" "echo" "HOME"。
2.4 CMD
用法:CMD command param1 param2
說明:CMD在Dockerfile中只能出現(xiàn)一次风皿,有多個(gè)河爹,只有最后一個(gè)會(huì)有效。其作用是在啟動(dòng)容器的時(shí)候提供一個(gè)默認(rèn)的命令項(xiàng)桐款。如果用戶執(zhí)行docker run的時(shí)候提供了命令項(xiàng)咸这,就會(huì)覆蓋掉這個(gè)命令。沒提供就會(huì)使用構(gòu)建時(shí)的命令魔眨。
2.5 EXPOSE
用法:EXPOSE <port> [<port>...]
說明:告訴Docker服務(wù)器容器對(duì)外映射的容器端口號(hào)媳维,在docker run -p的時(shí)候生效。
2.6 ENV
用法:EVN <key> <value> 只能設(shè)置一個(gè)
EVN <key>=<value>允許一次設(shè)置多個(gè)
說明:設(shè)置容器的環(huán)境變量冰沙,可以讓其后面的RUN命令使用侨艾,容器運(yùn)行的時(shí)候這個(gè)變量也會(huì)保留。
2.7 ADD
用法:ADD <src> <dest>
說明:復(fù)制本機(jī)文件或目錄或遠(yuǎn)程文件拓挥,添加到指定的容器目錄唠梨,支持GO的正則模糊匹配。路徑是絕對(duì)路徑侥啤,不存在會(huì)自動(dòng)創(chuàng)建当叭。如果源是一個(gè)目錄,只會(huì)復(fù)制目錄下的內(nèi)容盖灸,目錄本身不會(huì)復(fù)制蚁鳖。ADD命令會(huì)將復(fù)制的壓縮文件夾自動(dòng)解壓,這也是與COPY命令最大的不同赁炎。
2.8 COPY
用法:COPY <src> <dest>
說明:COPY除了不能自動(dòng)解壓醉箕,也不能復(fù)制網(wǎng)絡(luò)文件。其它功能和ADD相同。
2.9 ENTRYPOINT
用法:ENTRYPOINT "command" "param1" "param2"
說明:這個(gè)命令和CMD命令一樣讥裤,唯一的區(qū)別是不能被docker run命令的執(zhí)行命令覆蓋放棒,如果要覆蓋需要帶上選項(xiàng)--entrypoint,如果有多個(gè)選項(xiàng)己英,只有最后一個(gè)會(huì)生效间螟。
2.10 VOLUME
用法:VOLUME ["path"]
說明:在主機(jī)上創(chuàng)建一個(gè)掛載,掛載到容器的指定路徑损肛。docker run -v命令也能完成這個(gè)操作厢破,而且更強(qiáng)大。這個(gè)命令不能指定主機(jī)的需要掛載到容器的文件夾路徑治拿。但docker run -v可以摩泪,而且其還可以掛載數(shù)據(jù)容器。
2.11 USER
用法:USER daemon
說明:指定運(yùn)行容器時(shí)的用戶名或UID忍啤,后續(xù)的RUN加勤、CMD、ENTRYPOINT也會(huì)使用指定的用戶運(yùn)行命令同波。
2.12 WORKDIR
用法:WORKDIR path
說明:為RUN鳄梅、CMD、ENTRYPOINT指令配置工作目錄未檩〈魇可以使用多個(gè)WORKDIR指令,后續(xù)參數(shù)如果是相對(duì)路徑冤狡,則會(huì)基于之前的命令指定的路徑孙蒙。如:WORKDIR /home WORKDIR test 。最終的路徑就是/home/test悲雳。path路徑也可以是環(huán)境變量挎峦,比如有環(huán)境變量HOME=/home,WORKDIR $HOME/test也就是/home/test合瓢。
2.13 ONBUILD
用法:ONBUILD [INSTRUCTION]
說明:配置當(dāng)前所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎(chǔ)鏡像時(shí)坦胶,所執(zhí)行的操作指令。意思就是晴楔,這個(gè)鏡像創(chuàng)建后顿苇,如果其它鏡像以這個(gè)鏡像為基礎(chǔ),會(huì)先執(zhí)行這個(gè)鏡像的ONBUILD命令税弃。
3.Dockerfile例子
一個(gè)使用安裝包安裝的tomcat例子:
FROM centos
MAINTAINER nobody "xx@qq.com"
RUN mkdir -p /opt/jdk/
RUN mkdir -p /opt/tomcat/
ADD jdk1.7.0_79 /opt/jdk/
ADD tomcat /opt/tomcat/
ENV CATALINA_HOME /opt/tomcat
ENV JAVA_HOME /opt/jdk
EXPOSE 8080
ENV PATH $PATH:$JAVA_HOME/bin
CMD ["/opt/tomcat/bin/catalina.sh","run"]
轉(zhuǎn)載來源【# http://www.cnblogs.com/lighten/p/6900556.html】