2019-01-05 Dockerfile 詳解

Dockerfile 樣本

FROM nginx:v1
MAINTAINER east_qiu@outlook.com
WORKDIR /usr/share/nginx/html
RUN echo '<h1>Hello, Docker!</h1>' > index.html
EXPOSE ['80', '443']
...

dockerfile官方文檔

  1. 構(gòu)建鏡像
docker build nginx .

-f 指定具體的dockerfile
-t 指定鏡像的tag忍些,指定存儲(chǔ)庫(kù)和標(biāo)記保存新映像骄噪,可以一次指定多個(gè)tag,生成多個(gè)鏡像

docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

構(gòu)建時(shí)docker會(huì)初步驗(yàn)證dockerfile样漆,如果有語(yǔ)法錯(cuò)誤摊阀,會(huì)提示
dockerfile每條指令都是獨(dú)立運(yùn)行的,并會(huì)創(chuàng)建一個(gè)新映像
Docker將重用中間映像(緩存),顯著加快Docker構(gòu)建過(guò)程绣版。
dockerfile 必須從FROM開始

FROM

FROM 基礎(chǔ)鏡像

escape

escape指令用于指定dockerfile里面的轉(zhuǎn)義字符胶台, 默認(rèn)是 \ , windows里面 `
escape定義在文件的最上方

# escape=`

FROM microsoft/nanoserver
COPY testfile.txt c:\
RUN dir c:\

ENV

ENV定義的環(huán)境變量在后續(xù)層次中才能夠被應(yīng)用

ENV abc=hello
ENV abc=bye def=$abc # def=hello
ENV ghi=$abc # ghi=bye

.dockerignore

COPY和ADD指令中用于忽略指定文件,加快構(gòu)建速度

RUN

RUN <command>
RUN ["executable", "param1", "param2"]

linux 上默認(rèn)上/bin/sh -c
windows上默認(rèn)cmd /S /C
RUN命令在當(dāng)前鏡像上執(zhí)行指令杂抽,構(gòu)建出一個(gè)新的鏡像诈唬,便于dockerfile下面的語(yǔ)句繼續(xù)執(zhí)行
RUN可以有多個(gè)

CMD

CMD一個(gè)dockerfile里只能有一個(gè)

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

如果指定ENTERPOINT, 用 CMD 指定具體的參數(shù)缩麸。
這里邊包括參數(shù)的一定要用雙引號(hào)铸磅,就是",不能是單引號(hào)。千萬(wàn)不能寫成單引號(hào)杭朱。

RUN & CMD

RUN是構(gòu)件容器時(shí)就運(yùn)行的命令以及提交運(yùn)行結(jié)果
CMD是容器啟動(dòng)時(shí)執(zhí)行的命令阅仔,在構(gòu)件時(shí)并不運(yùn)行,構(gòu)件時(shí)緊緊指定了這個(gè)命令到底是個(gè)什么樣子

LABEL

label為鏡像指定信息弧械,用于docker inspect 查看相關(guān)信息

MAINTAINER

指定維護(hù)者八酒,已經(jīng)廢棄

EXPOSE

EXPOSE用于指定容器運(yùn)行時(shí)指定對(duì)外暴露的端口
但是EXPOSE并不會(huì)使容器訪問主機(jī)的端口
如果想使得容器與主機(jī)的端口有映射關(guān)系,必須在容器啟動(dòng)的時(shí)候加上 -P參數(shù)

ADD

ADD把文件復(fù)制到鏡像中
ADD --chown=<user>:<group> src dist
chown 只有l(wèi)inux文件系統(tǒng)才有
src可以是文件刃唐,也可以是鏈接羞迷,也可以是目錄(不建議,會(huì)復(fù)制目錄和目錄下的所有文件)
如果文件系統(tǒng)里/etc/passwd or /etc/group 里面沒有chown指定的用戶画饥,構(gòu)建會(huì)出錯(cuò)

  • 增加的文件必須在鏡像上下文相對(duì)的目錄下衔瓮,也就是鏡像構(gòu)建上下文的相對(duì)目錄
  • 如果是一個(gè)URL,并且沒有結(jié)尾斜杠荒澡,那么從這個(gè)URL下載一個(gè)文件并復(fù)制到dist

COPY

單純的復(fù)制文件报辱,也是相對(duì)構(gòu)建的鏡像上下文

ENTRYPOINT

ENTRYPOINT 的格式和 RUN 指令格式一樣,分為 exec 格式和 shell 格式
exec 形式
ENTRYPOINT [“executable”,”param1”,”param2"]
任何docker run設(shè)置的命令參數(shù)或者CMD指令的命令单山,都將作為ENTRYPOINT 指令的命令參數(shù)碍现,追加到ENTRYPOINT指令之后。
ENTRYPOINT command param1 param2
這種格式禁止追加任何參數(shù)米奸,即CMD指令或docker run后面的參數(shù)都將被忽略昼接。采用shell格式,在容器中執(zhí)行時(shí)悴晰,自動(dòng)調(diào)用shell慢睡。

CMD&&ENTRYPOINT

  • CMD可以為ENTRYPOINT提供參數(shù),
    ENTRYPOINT本身也可以包含參數(shù)铡溪,但是可以把需要變動(dòng)的參數(shù)寫到CMD里面漂辐,而不需要變動(dòng)的參數(shù)寫到ENTRYPOINT里面;
  • ENTRYPOINT使用第二種shell方式會(huì)屏蔽掉CMD里面的命令參數(shù)和docker run后面加的命令棕硫。
  • 在Dockerfile中髓涯,ENTRYPOINT指定的參數(shù)比運(yùn)行docker run時(shí)指定的參數(shù)更靠前。
  • ENTRYPOINT/CMD中不能把一個(gè)有限執(zhí)行的命令加到一個(gè)無(wú)限執(zhí)行的命令后面哈扮。這會(huì)導(dǎo)致后面的有限執(zhí)行的命令無(wú)法執(zhí)行纬纪。因?yàn)闊o(wú)限命令一直在執(zhí)行蚓再,永遠(yuǎn)都無(wú)法執(zhí)行結(jié)束,所以會(huì)導(dǎo)致后面的有限執(zhí)行命令阻塞包各。
  • ENTRYPOINT/CMD中最后的一個(gè)命令必須要是無(wú)限執(zhí)行的命令摘仅。

Dockerfile 中的每一行都產(chǎn)生一個(gè)新層;
下列代碼每一行都又一個(gè)獨(dú)立的id问畅,而且下面產(chǎn)生的三層是只讀的娃属,一旦Image被運(yùn)行時(shí),會(huì)產(chǎn)生一個(gè)新層 container 層按声,這一層是可讀可寫的膳犹;
分層的優(yōu)勢(shì)在于,兩個(gè)image可以共享一些層签则,降低了存儲(chǔ)的壓力

FROM alpine:latest
MAINTAINER cc
CMD echo "hello docker"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铐料,隨后出現(xiàn)的幾起案子渐裂,更是在濱河造成了極大的恐慌,老刑警劉巖钠惩,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柒凉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡篓跛,警方通過(guò)查閱死者的電腦和手機(jī)膝捞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愧沟,“玉大人蔬咬,你說(shuō)我怎么就攤上這事°逅拢” “怎么了林艘?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)混坞。 經(jīng)常有香客問我狐援,道長(zhǎng),這世上最難降的妖魔是什么究孕? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任啥酱,我火速辦了婚禮,結(jié)果婚禮上厨诸,老公的妹妹穿的比我還像新娘镶殷。我一直安慰自己,他們只是感情好泳猬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布批钠。 她就那樣靜靜地躺著宇植,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埋心。 梳的紋絲不亂的頭發(fā)上指郁,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音拷呆,去河邊找鬼闲坎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茬斧,可吹牛的內(nèi)容都是我干的腰懂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼项秉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绣溜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起娄蔼,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怖喻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岁诉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锚沸,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年涕癣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哗蜈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坠韩,死狀恐怖距潘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情同眯,我是刑警寧澤绽昼,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站须蜗,受9級(jí)特大地震影響硅确,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜明肮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一菱农、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柿估,春花似錦循未、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绣檬。三九已至,卻和暖如春嫂粟,著一層夾襖步出監(jiān)牢的瞬間娇未,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工星虹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留零抬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓宽涌,卻偏偏與公主長(zhǎng)得像平夜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卸亮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一忽妒、Docker創(chuàng)建鏡像的方式有兩種: 一種通過(guò)commit的方式:把做了一系列操作的容器關(guān)閉,然后利用docke...
    jie0112閱讀 3,831評(píng)論 0 3
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,748評(píng)論 1 21
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一嫡良、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,499評(píng)論 0 120
  • 一個(gè)人坐在飛機(jī)的一個(gè)角落锰扶,看著外面的天空,由藍(lán)天白云陽(yáng)光燦爛變成了漆黑一片寝受,僅有點(diǎn)點(diǎn)的繁星閃爍。罕偎。很澄。 ...
    鴕鳥_閱讀 179評(píng)論 0 0
  • 這個(gè)活動(dòng)給它起個(gè)名字墨林,就叫鏡子手吧。A的手隨意舞動(dòng)犯祠,B的手要緊跟A的手舞動(dòng)旭等,通過(guò)A的手,要看不到B的手衡载。當(dāng)扮演A時(shí)...
    七姑娘_7閱讀 135評(píng)論 0 0