使用Dockerfile建立docker鏡像

使用Dockerfile建立docker鏡像

基本結(jié)構(gòu)

Dockerfile分為四個(gè)部分:基礎(chǔ)鏡像信息、維護(hù)者信息寞蚌、鏡像操作指令和容器啟動(dòng)時(shí)指令田巴。例如:

FROM ubuntu:16.04
# 維護(hù)者信息
MAINTAINER Northfly "northfly@163.com"

# 鏡像操作指令
RUN apt-get update \
    && apt-get install -y python-pip python3-pip
RUN pip install --upgrade pip
RUN pip install tensorflow==1.5.0 \
    jupyter==1.0.0 \
    xgboost==0.80 \
    scikit-learn==0.19.2 \
    pandas==0.22.0 \
    keras==2.2.2
RUN pip3 install --upgrade pip
RUN pip3 install tensorflow==1.5.0 \
    jupyter==1.0.0 \
    xgboost==0.80 \
    scikit-learn==0.19.2 \
    pandas==0.22.0 \
    keras==2.2.2

# 容易啟動(dòng)時(shí)執(zhí)行指令
CMD [ "/bin/bash" ]

指令介紹

1.FROM

格式為FROM <image> 或 FROM<image>:<tag>,例如:
FROM ubuntu 或 FROM ubuntu:16.04

2.MAINTAINER

格式為MAINTAINER <name> <other info>睬澡,例如:
MAINTAINER Northfly "northfly@163.com"

3.RUN

格式為RUN <command>或RUN ["executable","param1","param1"]固额,例如:
RUN apt-get update 或 RUN ["/bin/bash", "-c", "echo hello"]
# 命令較長時(shí)可以使用\來換行,例如:
RUN apt-get update \
    && apt-get install -y python-pip python3-pip

4.CMD

支持三種格式:
CMD ["executable","param1","param2"] 使用exec執(zhí)行,推薦方式
CMD command param1 param2 在/bin/sh中執(zhí)行,提供給需要交互的應(yīng)用
CMD ["param1","param2"] 提供給ENTRYPOINT的默認(rèn)參數(shù) 
指定啟動(dòng)容器時(shí)執(zhí)行的命令煞聪,每個(gè)Dockerfile只能有一條CMD命令斗躏。如果指定了多條命令,只有最后一條被執(zhí)行
如果用戶啟動(dòng)容器時(shí)指定了運(yùn)行的命令昔脯,則會(huì)覆蓋掉CMD指定的命令

5.EXPOSE

暴露容器的端口號(hào)啄糙,如ssh服務(wù)需要暴露容器的端口號(hào)22,可以執(zhí)行
EXPOSE 22
啟動(dòng)容器是使用-p,則可以具體指定哪個(gè)本地端口映射過來

6.ENV

格式為ENV <key> <value>云稚。指定一個(gè)環(huán)境變量隧饼,會(huì)被后續(xù)RUN指令使用,并在容器運(yùn)行時(shí)保持静陈。例如:
ENV CUDA_HOME /usr/local/cuda 

7.ADD

格式為ADD <src> <dest>.
該命令將復(fù)制指定的<src>到容器中的<dest>燕雁。其中<src>可以是Dockerfile所在目錄的一個(gè)相對(duì)路徑(文件或目錄);也可以是一個(gè)URL;還可以是一個(gè)tar文件(自動(dòng)解壓為目錄)鲸拥。

8.COPY

格式為COPY <src> <dest>
復(fù)制本地主機(jī)的<src>(為Dockerfile所在目錄的相對(duì)路徑拐格,文件或目錄)為容器中的<dest>。目標(biāo)路徑不存在是刑赶,會(huì)自動(dòng)創(chuàng)建捏浊。
當(dāng)使用本地目錄為源目錄時(shí),推薦使用COPY撞叨。

9.ENTRYPOINT

有兩種格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中執(zhí)行)
配置容器啟動(dòng)后執(zhí)行的命令金踪,并且不可被docker run提供的參數(shù)覆蓋。
每個(gè)Dockerfile中只能有一個(gè)ENTRYPOINT,當(dāng)指定多個(gè)ENTRYPOINT時(shí)牵敷,只有最后一個(gè)生效

10.VOLUME

格式為VULUME ["/data"]
創(chuàng)建一個(gè)可以從本地主機(jī)或其他容器掛載的掛載點(diǎn)胡岔,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。

11.USER

格式為USER daemon
指定運(yùn)行容器是的用戶名或UID,后續(xù)的RUN也會(huì)使用指定用戶枷餐。

12.WORKDIR

格式為WORKDIR /path/to/workdir
為后續(xù)的RUN姐军、CMD、ENTERYPOINT指令配置工作目錄
可以使用多個(gè)WORKDIR指令,后續(xù)命令如果參數(shù)是相對(duì)路徑奕锌,則會(huì)基于之前命令指定著觉。例如:
WORKDIR /home
WORKDIR user
WORKDIR Downloads
RUN pwd
則最終路徑為/home/user/Downloads

13.ONBUILD

格式為ONBUILD [INSTRUCTION]
配置當(dāng)所創(chuàng)建的鏡像作為其他新創(chuàng)建的基礎(chǔ)鏡像時(shí),所執(zhí)行的操作指令惊暴。例如:
ONBUILD ADD . /app/src

創(chuàng)建鏡像

編寫完成Dockerfile之后饼丘,可以通過docker build命令來創(chuàng)建鏡像。

基本格式為docker build [選項(xiàng)] 路徑辽话,該命令將讀取指定路徑下(包括子目錄)的Dockerfile肄鸽,并將該路徑下所有內(nèi)容發(fā)送給Docker服務(wù)器端,由服務(wù)器端來創(chuàng)建鏡像油啤。因此一般建議放置Dockerfile的目錄為空目錄典徘。

例如,指定Dockerfile所在的路徑為./Python_Tensorflow/cpu/益咬,并且希望生成鏡像標(biāo)簽為ubuntu16_tensorflow15,可以使用下面的命令:

docker build -t ubuntu16_tensorflow15 ./Python_Tensorflow/cpu/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逮诲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子幽告,更是在濱河造成了極大的恐慌梅鹦,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冗锁,死亡現(xiàn)場(chǎng)離奇詭異齐唆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冻河,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門箍邮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叨叙,你說我怎么就攤上這事锭弊。” “怎么了摔敛?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長全封。 經(jīng)常有香客問我马昙,道長,這世上最難降的妖魔是什么刹悴? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任行楞,我火速辦了婚禮,結(jié)果婚禮上土匀,老公的妹妹穿的比我還像新娘子房。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布证杭。 她就那樣靜靜地躺著田度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解愤。 梳的紋絲不亂的頭發(fā)上镇饺,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音送讲,去河邊找鬼奸笤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哼鬓,可吹牛的內(nèi)容都是我干的监右。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼异希,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼健盒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宠互,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤味榛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后予跌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搏色,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年券册,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了频轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烁焙,死狀恐怖航邢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骄蝇,我是刑警寧澤膳殷,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站九火,受9級(jí)特大地震影響赚窃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岔激,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一勒极、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虑鼎,春花似錦辱匿、人聲如沸键痛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽絮短。三九已至,卻和暖如春乐尊,著一層夾襖步出監(jiān)牢的瞬間戚丸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工扔嵌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留限府,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓痢缎,卻偏偏與公主長得像胁勺,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子独旷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350