Dockfile詳解

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"颜懊,而不是RUN "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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纪岁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子则果,更是在濱河造成了極大的恐慌幔翰,老刑警劉巖漩氨,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遗增,居然都是意外死亡才菠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門贡定,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人可都,你說我怎么就攤上這事缓待。” “怎么了渠牲?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵旋炒,是天一觀的道長。 經(jīng)常有香客問我签杈,道長瘫镇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任答姥,我火速辦了婚禮铣除,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹦付。我一直安慰自己尚粘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布敲长。 她就那樣靜靜地躺著郎嫁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祈噪。 梳的紋絲不亂的頭發(fā)上泽铛,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音辑鲤,去河邊找鬼盔腔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛遂填,可吹牛的內(nèi)容都是我干的铲觉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吓坚,長吁一口氣:“原來是場噩夢啊……” “哼撵幽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起礁击,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤盐杂,失蹤者是張志新(化名)和其女友劉穎逗载,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體链烈,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厉斟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了强衡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擦秽。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漩勤,靈堂內(nèi)的尸體忽然破棺而出感挥,到底是詐尸還是另有隱情,我是刑警寧澤越败,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布触幼,位于F島的核電站,受9級(jí)特大地震影響究飞,放射性物質(zhì)發(fā)生泄漏置谦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一亿傅、第九天 我趴在偏房一處隱蔽的房頂上張望媒峡。 院中可真熱鬧,春花似錦葵擎、人聲如沸丝蹭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奔穿。三九已至,卻和暖如春敏晤,著一層夾襖步出監(jiān)牢的瞬間贱田,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工嘴脾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留男摧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓译打,卻偏偏與公主長得像耗拓,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奏司,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355