Docker學習之Dockerfile

Dockerfile基本結構

Dockerfile是一個編寫docker鏡像的腳本文件,其中包含了若干條描述構建鏡像的細節(jié)的docker指令,使用Dockerfile可以允許用戶創(chuàng)建自定義的docker鏡像.
Dockerfile由一行行的命令語句組成,并且支持以#開頭的的注釋行,一般由以下四部分組成:
1.基礎鏡像
使用FROM指令來設置基礎鏡像,FROM指令有固定的格式為FROM <鏡像名>:<標簽名>,若鏡像為latest版本則tag可以省略,否則必須指定版本號,如FROM java:8
2.維護者信息
格式為MAINTAINER<name>,指定維護者信息.
3.鏡像操作指令

  • ADD
    格式為ADD <src><dest>,該命令將復制宿主機的路徑下的文件到容器的目標路徑下,宿主機的路徑可以為相對路徑,容器的目標路徑必須為絕對路徑.使用ADD指令將自動解壓來源路徑中的壓縮包.
  • COPY
    格式為COPY <src><dest>,與ADD功能類似,COPY指令沒有自動解壓的功能.
  • USER
    用于設置運行RUN指令的用戶,格式為USER 用戶名.
  • RUN
    執(zhí)行命令的指令,格式為RUN <command> 或者RUN ["executable", "param1", "param2"].
    前者將在 shell 終端中運行命令,即 /bin/sh -c; 后者則使用exec執(zhí)行.指定使用其它終端可以通過第二種方式實現,例如RUN ["/bin/bash", "-c", "echo hello"].每條RUN指令將在當前鏡像基礎上執(zhí)行指定命令,并提交為新的鏡像.當命令較長時可以使用\來換行.
  • ENV
    用于設置環(huán)境變量,格式為ENV <key><value>
  • EXPOSE
    聲明運行時容器暴露的端口,格式為EXPOSE <port>.
  • WORKDIR
    設置進入容器時的工作目錄,格式為WORKDIR /path/to/workdir
  • VOLUME
    指定可被掛載的數據卷,用于目錄映射.格式為VOLUME /path/data.
  • ONBUILD
    設置構建時需自動執(zhí)行的指令.

4.容器啟動時執(zhí)行指令

  • CMD
    支持三種格式
    CMD ["executable","param1","param2"]使用exec執(zhí)行,推薦方式.
    CMD command param1 param2在/bin/sh中執(zhí)行,提供給需要交互的應用.
    CMD ["param1","param2"]提供給ENTRYPOINT的默認參數.
    指定啟動容器時執(zhí)行的命令,每個Dockerfile只能有一條CMD命令.如果指定了多條命令,只有最后一條會被執(zhí)行.
    如果用戶啟動容器時候指定了運行的命令,則會覆蓋掉CMD指定的命令.

  • ENTRYPOINT
    兩種格式
    ENTRYPOINT ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2(shell中執(zhí)行).
    配置容器啟動后執(zhí)行的命令,并且不可被docker run提供的參數覆蓋.
    每個 Dockerfile中只能有一個ENTRYPOINT,當指定多個時,只有最后一個起效.

使用Dockerfile構建鏡像

前面已經了解了Dockerfile的基本結構了,下面基于Dockerfile我們來構建一個java鏡像.
先在宿主機上創(chuàng)建個目錄存放要構建的jdk源文件包.

mkdir /usr/local/docker/software
cp jdk-8u181-linux-x64.tar.gz /usr/local/docker/software

創(chuàng)建空白的Dockerfile文本文件,注意Dockerfile要與放到容器中的文件存儲在同一目錄下即/usr/local/docker/software,接下來開始編寫Dockerfile指令:

FROM centos:latest #設置基礎鏡像centos
MAINTAINER "william.zhang"<952408421@qq.com> #設置維護者信息
ADD jdk-8u181-linux-x64.tar.gz /opt#復制文件到容器的opt目錄下并自動解壓
RUN ln -s /opt/jdk1.8.0_181 /opt/jdk#執(zhí)行指令建立符號鏈接用于快速訪問jdk目錄
#設置JDK環(huán)境變量
ENV JAVA_HOME /opt/jdk
ENV PATH $JAVA_HOME/bin:$PATH
#設置容器啟動時輸出JDK版本
CMD java -version

然后使用docker build命令來讀取Dockerfile文件,并構建鏡像.


image.png

我們使用了-t選項來制定鏡像的名稱,并讀取當前目錄中的Dockerfile文件.
接著使用docker images可以查看已構建好的所有鏡像了.

[root@bogon software]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
192.168.56.101:5000/hello/hello-api   1.0.0               c1cefec5b8a8        23 hours ago        673MB
nginx                                 latest              c82521676580        4 days ago          109MB
registry                              latest              b2b03e9146e1        3 weeks ago         33.3MB
java                                  8                   d23bdf5b1b1b        18 months ago       643MB

最后我們還可以使用docker tag來修改鏡像的倉庫名與標簽名:

docker tag d23bdf5b1b1b java:8
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末度硝,一起剝皮案震驚了整個濱河市曙旭,隨后出現的幾起案子涯贞,更是在濱河造成了極大的恐慌,老刑警劉巖星持,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抢埋,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機揪垄,發(fā)現死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門穷吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饥努,你說我怎么就攤上這事捡鱼。” “怎么了酷愧?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵驾诈,是天一觀的道長。 經常有香客問我溶浴,道長乍迄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任士败,我火速辦了婚禮闯两,結果婚禮上,老公的妹妹穿的比我還像新娘谅将。我一直安慰自己漾狼,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布饥臂。 她就那樣靜靜地躺著逊躁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擅笔。 梳的紋絲不亂的頭發(fā)上志衣,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天屯援,我揣著相機與錄音猛们,去河邊找鬼。 笑死狞洋,一個胖子當著我的面吹牛弯淘,可吹牛的內容都是我干的。 我是一名探鬼主播吉懊,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼庐橙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了借嗽?” 一聲冷哼從身側響起态鳖,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恶导,沒想到半個月后浆竭,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年邦泄,在試婚紗的時候發(fā)現自己被綠了删窒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡顺囊,死狀恐怖肌索,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情特碳,我是刑警寧澤诚亚,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站午乓,受9級特大地震影響亡电,放射性物質發(fā)生泄漏。R本人自食惡果不足惜硅瞧,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一份乒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腕唧,春花似錦或辖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至但惶,卻和暖如春耳鸯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膀曾。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工县爬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人添谊。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓财喳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斩狱。 傳聞我的和親對象是個殘疾皇子耳高,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容