學習Docker之Dockerfile的命令

積木.png

使用Dockerfile去構建鏡像好比堆積木鞠苟、使用pom去構建maven項目一樣可缚,有異曲同工之妙,下面就把Dockerfile中主要的命令介紹一下爽室。

組成部分

部分 命令
基礎鏡像信息 FROM
維護者信息 MAINTAINER
鏡像操作指令 RUN、COPY淆攻、ADD阔墩、EXPOSE、WORKDIR卜录、ONBUILD戈擒、USER、VOLUME等
容器啟動時執(zhí)行指令 CMD艰毒、ENTRYPOINT

詳情:官方文檔

各命令詳解

FROM

指定哪種鏡像作為新鏡像的基礎鏡像筐高,如:

FROM ubuntu:14.04

MAINTAINER

指明該鏡像的作者和其電子郵件,如:

MAINTAINER vector4wang "xxxxxxx@qq.com"

RUN

在新鏡像內部執(zhí)行的命令丑瞧,比如安裝一些軟件柑土、配置一些基礎環(huán)境,可使用\來換行绊汹,如:

RUN echo 'hello docker!' \
    > /usr/local/file.txt

也可以使用exec格式RUN ["executable", "param1", "param2"]的命令稽屏,如:

RUN ["apt-get","install","-y","nginx"]

要注意的是,executable是命令西乖,后面的param是參數

COPY

將主機的文件復制到鏡像內狐榔,如果目的位置不存在,Docker會自動創(chuàng)建所有需要的目錄結構获雕,但是它只是單純的復制薄腻,并不會去做文件提取和解壓工作。如:

COPY application.yml /etc/springboot/hello-service/src/resources

注意:需要復制的目錄一定要放在Dockerfile文件的同級目錄下
原因:

因為構建環(huán)境將會上傳到Docker守護進程届案,而復制是在Docker守護進程中進行的庵楷。任何位于構建環(huán)境之外的東西都是不可用的。COPY指令的目的的位置則必須是容器內部的一個絕對路徑楣颠。
---《THE DOCKER BOOK》

ADD

將主機的文件復制到鏡像中尽纽,跟COPY一樣,限制條件和使用方式都一樣童漩,如:

ADD application.yml /etc/springboot/hello-service/src/resources

但是ADD會對壓縮文件(tar, gzip, bzip2, etc)做提取和解壓操作弄贿。

EXPOSE

暴露鏡像的端口供主機做映射,啟動鏡像時睁冬,使用-P參數來講鏡像端口與宿主機的隨機端口做映射挎春。使用方式(可指定多個):

EXPOSE 8080 
EXPOSE 8081
...

WORKDIR

在構建鏡像時看疙,指定鏡像的工作目錄,之后的命令都是基于此工作目錄直奋,如果不存在能庆,則會創(chuàng)建目錄。如

WORKDIR /usr/local
WORKDIR webservice
RUN echo 'hello docker' > text.txt
...

最終會在/usr/local/webservice/目錄下生成text.txt文件

ONBUILD

當一個包含ONBUILD命令的鏡像被用作其他鏡像的基礎鏡像時(比如用戶的鏡像需要從某為準備好的位置添加源代碼脚线,或者用戶需要執(zhí)行特定于構建鏡像的環(huán)境的構建腳本)搁胆,該命令就會執(zhí)行。
如創(chuàng)建鏡像image-A

FROM ubuntu
...
ONBUILD ADD . /var/www
...

然后創(chuàng)建鏡像image-B邮绿,指定image-A為基礎鏡像渠旁,如

FROM image-A
...

然后在構建image-B的時候,日志上顯示如下:

Step 0 : FROM image-A
# Execting 1 build triggers
Step onbuild-0 : ADD . /var/www
...

USER

指定該鏡像以什么樣的用戶去執(zhí)行船逮,如:

USER mongo

VOLUME

用來向基于鏡像創(chuàng)建的容器添加卷顾腊。比如你可以將mongodb鏡像中存儲數據的data文件指定為主機的某個文件。(容器內部建議不要存儲任何數據)
如:

VOLUME /data/db /data/configdb

注意:VOLUME 主機目錄 容器目錄

CMD

容器啟動時需要執(zhí)行的命令挖胃,如:

CMD /bin/bash

同樣可以使用exec語法杂靶,如

CMD ["/bin/bash"]

當有多個CMD的時候,只有最后一個生效酱鸭。

ENTRYPOINT

作用和用法和CMD一模一樣

CMD和ENTRYPOINT的區(qū)別

敲黑板B鹂濉!凹髓!非常重要
一定要注意烁登!

一定要注意!

一定要注意蔚舀!
CMD和ENTRYPOINT同樣作為容器啟動時執(zhí)行的命令,區(qū)別有以下幾點:

CMD的命令會被 docker run 的命令覆蓋而ENTRYPOINT不會

如使用CMD ["/bin/bash"]ENTRYPOINT ["/bin/bash"]后赌躺,再使用docker run -ti image啟動容器捷泞,它會自動進入容器內部的交互終端,如同使用
docker run -ti image /bin/bash寿谴。

但是如果啟動鏡像的命令為docker run -ti image /bin/ps,使用CMD后面的命令就會被覆蓋轉而執(zhí)行bin/ps命令失受,而ENTRYPOINT的則不會讶泰,而是會把docker run 后面的命令當做ENTRYPOINT執(zhí)行命令的參數
以下例子比較容易理解
Dockerfile中為

ENTRYPOINT ["/user/sbin/nginx"]

然后通過啟動build之后的容器

docker run -ti image -g "daemon off"

此時-g "daemon off"會被當成參數傳遞給ENTRYPOINT拂到,最終的命令變成了

/user/sbin/nginx -g "daemon off"

CMD和ENTRYPOINT都存在時

CMD和ENTRYPOINT都存在時痪署,CMD的指令變成了ENTRYPOINT的參數,并且此CMD提供的參數會被 docker run 后面的命令覆蓋兄旬,如:

...
ENTRYPOINT ["echo","hello","i am"]
CMD ["docker"]

之后啟動構建之后的容器

  • 使用docker run -ti image

    輸出“hello i am docker”

  • 使用docker run -ti image world

    輸出“hello i am world”

指令比較多狼犯,可以通過分類(如開頭的表格)的辦法去記憶

示例

自己寫了個簡單的示例余寥,非常簡單

FROM ubuntu
MAINTAINER vector4wang xxxx@qq.com

WORKDIR /usr/local/docker
ADD temp.zip ./add/
COPY temp.zip ./copy/
EXPOSE 22
RUN groupadd -r vector4wang && useradd -r -g vector4wang vector4wang
USER vector4wang

ENTRYPOINT ["/bin/bash"]

下面是運行過程


1.png

2.png

(動態(tài)圖太大了上傳不了)

注意 登錄之后的用戶名和ADD、COPY進去的文件

后記

以上只是自己通過看書寫demo和瀏覽其他人的博文所總結出來的悯森,之后在實戰(zhàn)的過程中會把遇到的一些實際問題追加進來宋舷。

參考: https://www.cnblogs.com/lienhua34/p/5170335.html

CSDN:http://blog.csdn.net/qqhjqs?viewmode=list
博客:http://blog.wangxc.club/
簡書:http://www.reibang.com/u/223a1314e818
Github:https://github.com/vector4wang
Gitee:https://gitee.com/backwxc
如果感覺有幫助的話,點個贊哦~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末瓢姻,一起剝皮案震驚了整個濱河市祝蝠,隨后出現的幾起案子,更是在濱河造成了極大的恐慌幻碱,老刑警劉巖绎狭,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異褥傍,居然都是意外死亡儡嘶,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門恍风,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹦狂,“玉大人,你說我怎么就攤上這事邻耕∨缚В” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵兄世,是天一觀的道長啼辣。 經常有香客問我,道長御滩,這世上最難降的妖魔是什么鸥拧? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮削解,結果婚禮上富弦,老公的妹妹穿的比我還像新娘。我一直安慰自己氛驮,他們只是感情好腕柜,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矫废,像睡著了一般盏缤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蓖扑,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天唉铜,我揣著相機與錄音,去河邊找鬼律杠。 笑死潭流,一個胖子當著我的面吹牛竞惋,可吹牛的內容都是我干的。 我是一名探鬼主播灰嫉,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼拆宛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熬甫?” 一聲冷哼從身側響起胰挑,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椿肩,沒想到半個月后瞻颂,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡郑象,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年贡这,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厂榛。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡盖矫,死狀恐怖,靈堂內的尸體忽然破棺而出击奶,到底是詐尸還是另有隱情辈双,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布柜砾,位于F島的核電站湃望,受9級特大地震影響,放射性物質發(fā)生泄漏痰驱。R本人自食惡果不足惜证芭,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望担映。 院中可真熱鬧废士,春花似錦、人聲如沸蝇完。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽短蜕。三九已至泛源,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忿危,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工没龙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铺厨,地道東北人缎玫。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像解滓,于是被迫代替她去往敵國和親赃磨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容