docker基礎(chǔ) --- Dockerfile命令詳解篇

COPY 復(fù)制文件

和RUN一樣顽决,COPY也有2中格式饺藤,一種是命令行阱飘,一種類似于函數(shù)調(diào)用

  • COPY <源路徑>...<目標(biāo)路徑>
  • COPY ["<源路徑>"..."<目標(biāo)路徑>"]

COPY指令將從構(gòu)建上下文目錄中(源路徑)復(fù)制到新的鏡像中的(目標(biāo)路徑)斥杜,源路徑可以是多個,也可以是通配符

FROM centos
COPY mydockerfile /home

ADD更高級的復(fù)制文件

ADD和COPY類似沥匈,但是ADD多了一些功能蔗喂,比如源路徑可以是url,ADD會下載該文件高帖,并設(shè)置為600權(quán)限缰儿,如果文件是壓縮文件,ADD會自動解壓散址。官方并不推薦使用該方法乖阵,可以通過COPY和RUN結(jié)合實現(xiàn)ADD方法

CMD容器啟動命令

和RUN一樣,CMD也有2中格式

  • shell格式:CMD <命令>
  • exec格式:CMD ["可執(zhí)行文件","參數(shù)1","參數(shù)2"....]
  • 參數(shù)列表格式:CMD ["參數(shù)1","參數(shù)2"....]

因為docker不是虛擬機预麸,是容器瞪浸,而容器中的應(yīng)用都應(yīng)該以前臺執(zhí)行,而不是像虛擬機吏祸、物理機使用init啟動服務(wù)在后臺運行默终,容器沒有后臺的概念。當(dāng)CMD service nginx start的時候犁罩,因為是在后臺運行齐蔽,當(dāng)該命令運行完,容器也退出了床估。所以在前面制作nginx鏡像的時候nginx使用daemon off將nginx在前臺運行含滴。

==一個Dockerfile文件中只能有一個CMD,如果有多條丐巫,只有最后一條會被執(zhí)行==

FROM ....
RUN ....
CMD ["nginx","-g","daemon off;"]

ENTRYPOINT 入口點

和CMD一樣谈况,也有shell和exec兩種格式

ENTRYPOIN和CMD目的一樣勺美,都是指定容器啟動程序及參數(shù)。不同點就是當(dāng)設(shè)置了ENTRYPOINT后運行容器時可以傳遞參數(shù)

示例:給CMD命令傳參

FROM centos
ENTRYPOINT ["curl","http://ip.cn"]

如果ENTRYPOINT換成CMD碑韵,則只能獲取ip對應(yīng)地址赡茸。如果需要獲取頭信息,CMD則不行祝闻。需要給curl傳-i參數(shù)占卧。ENTRYPOINT則可以實現(xiàn)

[root@localhost ~]# docker run -it --rm centos_curl -i
HTTP/1.1 200 OK
Server: nginx/1.11.3
Date: Fri, 10 Feb 2017 03:43:03 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive

當(dāng)前 IP:xxx.xxx.xxx.xxx 來自:xxx市 xxx網(wǎng)

該命令相當(dāng)于把-i參數(shù)添加到了["curl","http://ip.cn"]的最后

ENV 環(huán)境變量

定義環(huán)境變量,無論是docker其他某些指令還是運行時的應(yīng)用联喘,都可以使用這里的環(huán)境變量华蜒,支持環(huán)境變量的指令:ADD、COPY豁遭、ENV叭喜、EXPOSE、LABEL蓖谢、USER捂蕴、WORKDIR、VOLUME闪幽、STOPSIGNAL啥辨、ONBUILD

  • ENV <key> <value>
  • ENV <key1>=<value1> <key2>=<value2>

示例

FROM centos
ENV VERSION=1.10
RUN yum install nginx-$VERSION -y
...

ARG 構(gòu)建參數(shù)

和ENV一樣,都是設(shè)置環(huán)境變量沟使,不同的是ARG設(shè)置的是構(gòu)建環(huán)境的環(huán)境變量渊跋,在容器運行時不會存在這些環(huán)境變量

格式: ARG <參數(shù)名>[=<默認(rèn)值>]

VOLUME 定義匿名卷

docker會在主機上創(chuàng)建一個目錄腊嗡,默認(rèn)在/var/lib/docker下燕少,然后將其掛在到指定的路徑蒿囤,當(dāng)刪除使用該volume的容器時,VOLUME本身不受影響底挫,可以一直保存下去脸侥,對主機的/var/lib/docker目錄的操作,會同步到掛在該目錄的容器中去

  • VOLUME ["<路徑1>","<路徑2>"...]
  • VOLUME <路徑>

也可以在執(zhí)行run的時候掛載

  • docker run -v /data centos

  • docker run -v /opt/data:/data centos

    將主機上/opt/data目錄掛載到容器的/data目錄

EXPOSE 端口聲明]

聲明運行時容器應(yīng)用所提供的端口官边,只是一個聲明,運行時不會開啟這個端口注簿。好處是:一在Dockerfile中寫入容易理解該鏡像服務(wù)的守護(hù)端口,方便配置映射捐晶。二在運行時使用隨機端口映射時(docker run -P),會自動隨機映射EXPOSE的端口

EXPOSE <端口1> [<端口2>...]

WORKDIR 指定工作目錄

WORKDIR指定當(dāng)前工作目錄

WORKDIR <工作目錄路徑>

FROM centos
WORKDIR /opt
RUN xxxx

該RUN命令在/opt目錄下運行

FROM centos
WORKDIR /opt
WORKDIR a
WORKDIR b
RUN xxxx

該RUN命令在/opt/a/b目錄下運行

USER 指定當(dāng)前用戶

和WORKDIR類似租悄,為后面RUN泣棋、CMD、ENTRYPOINT等命令指定運行用戶潭辈,如果鏡像中沒有該用戶會報錯

FROM centos
RUN useradd www /sbin/nologin
USER www
CMD ["whoami"]

ONBUILD

Dockerfile中指令都是工作于當(dāng)前鏡像把敢,而ONBUILD是下一鏡像以該鏡像為基礎(chǔ)鏡像是才會執(zhí)行谅辣。當(dāng)該鏡像作為基礎(chǔ)鏡像,基礎(chǔ)鏡像變化后柏副,其他項目用這個Dockerfile重構(gòu)鏡像會繼承這個基礎(chǔ)鏡像

ONBUILD 其他指令

示例:

FROM centos
RUN yum install nginx -y
USER www
ONBUILD COPY nginx.conf /etc/nginx
CMD ["nginx","-g","daemon off"]

將該Dockerfile構(gòu)建成nginx_centos鏡像

FROM nginx_centos

只需要這一行割择,即可運行上一個Dockerfile中的命令

應(yīng)用場景:當(dāng)有多個項目使用該鏡像時萎河,要修改某一配置,就不需要對每一個鏡像修改玛歌,直接修改基礎(chǔ)鏡像擎椰,其他鏡像即可繼承該鏡像

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末确憨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吞歼,更是在濱河造成了極大的恐慌,老刑警劉巖篙骡,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尿褪,死亡現(xiàn)場離奇詭異得湘,居然都是意外死亡淘正,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門囤采,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕉毯,“玉大人,你說我怎么就攤上這事代虾∈阋校” “怎么了托呕?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵频敛,是天一觀的道長。 經(jīng)常有香客問我着降,道長拗军,這世上最難降的妖魔是什么蓄喇? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任妆偏,我火速辦了婚禮钱骂,結(jié)果婚禮上挪鹏,老公的妹妹穿的比我還像新娘。我一直安慰自己解取,他們只是感情好肮蛹,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布创南。 她就那樣靜靜地躺著稿辙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赋咽。 梳的紋絲不亂的頭發(fā)上吨娜,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天陪毡,我揣著相機與錄音勾扭,去河邊找鬼妙色。 笑死,一個胖子當(dāng)著我的面吹牛身辨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播号俐,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼萧落,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陨倡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜜唾,沒想到半個月后袁余,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡棚饵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了且蓬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恶阴。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡存淫,死狀恐怖沼填,靈堂內(nèi)的尸體忽然破棺而出坞笙,到底是詐尸還是另有隱情荚虚,我是刑警寧澤版述,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布寞冯,位于F島的核電站吮龄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏母债。R本人自食惡果不足惜毡们,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一昧辽、第九天 我趴在偏房一處隱蔽的房頂上張望衙熔。 院中可真熱鬧,春花似錦搅荞、人聲如沸青责。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脖隶。三九已至,卻和暖如春暇检,著一層夾襖步出監(jiān)牢的瞬間产阱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工块仆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兴垦,地道東北人星澳。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子武鲁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

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