DockerFile指令集

 FROM   
        語法:FROM <image>[:<tag>]
        解釋:設置要製做的鏡像基於哪一個鏡像,FROM指令必須是整個Dockerfile的第一個指令,若是指定的鏡像不存在默認會自動從Docker Hub上下載。
 
    MAINTAINER
        語法:MAINTAINER <name>
        解釋:MAINTAINER指令容許你給將要製做的鏡像設置做者信息
 
    RUN
        語法:①RUN <command>        #將會調用/bin/sh -c <command>
                  ②RUN ["executable", "param1", "param2"]    #將會調用exec執行,以免有些時候shell方式執行時的傳遞參數問題,並且有些基礎鏡像可能不包含/bin/sh
        解釋:RUN指令會在一個新的容器中執行任何命令,而後把執行後的改變提交到當前鏡像,提交後的鏡像會被用於Dockerfile中定義的下一步操做,RUN中定義的命令會按順序執行並提交,這正是Docker廉價的提交和能夠基於鏡像的任何一個歷史點建立容器的好處,就像版本控制工具同樣。
 
    CMD
        語法:①CMD ["executable", "param1", "param2"]    #將會調用exec執行,首選方式
                  ②CMD ["param1", "param2"]        #當使用ENTRYPOINT指令時,爲該指令傳遞默認參數
                  ③CMD <command> [ <param1>|<param2> ]        #將會調用/bin/sh -c執行
        解釋:CMD指令中指定的命令會在鏡像運行時執行,在Dockerfile中只能存在一個,若是使用了多個CMD指令,則只有最後一個CMD指令有效。當出現ENTRYPOINT指令時,CMD中定義的內容會做爲ENTRYPOINT指令的默認參數,也就是說可使用CMD指令給ENTRYPOINT傳遞參數。
        注意:RUN和CMD都是執行命令,他們的差別在於RUN中定義的命令會在執行docker build命令建立鏡像時執行,而CMD中定義的命令會在執行docker run命令運行鏡像時執行,另外使用第一種語法也就是調用exec執行時,命令必須爲絕對路徑。
 
    EXPOSE
        語法:EXPOSE <port> [ ...]
        解釋:EXPOSE指令用來告訴Docker這個容器在運行時會監聽哪些端口,Docker在鏈接不一樣的容器(使用–link參數)時使用這些信息。
 
    ENV
        語法:ENV <key> <value>
        解釋:ENV指令用於設置環境變量,在Dockerfile中這些設置的環境變量也會影響到RUN指令,當運行生成的鏡像時這些環境變量依然有效,若是須要在運行時更改這些環境變量能夠在運行docker run時添加–env <key>=<value>參數來修改。
        注意:最好不要定義那些可能和系統預約義的環境變量衝突的名字,不然可能會產生意想不到的結果。
 
    ADD
        語法:ADD <src> <dest>
        解釋:ADD指令用於從指定路徑拷貝一個文件或目錄到容器的指定路徑中,<src>是一個文件或目錄的路徑,也能夠是一個url,路徑是相對於該Dockerfile文件所在位置的相對路徑,<dest>是目標容器的一個絕對路徑,例如/home/yooke/Docker/Dockerfile這個文件中定義的,那麼ADD /data.txt /db/指令將會嘗試拷貝文件從/home/yooke/Docker/data.txt到將要生成的容器的/db/data.txt,且文件或目錄的屬組和屬主分別爲uid和gid爲0的用戶和組,若是是經過url方式獲取的文件,則權限是600。
        注意:①若是執行docker build – < somefile即經過標準輸入來建立時,ADD指令只支持url方式,另外若是url須要認證,則能夠經過RUN wget …或RUN curl …來完成,ADD指令不支持認證。
                  ②<src>路徑必須與Dockerfile在同級目錄或子目錄中,例如不能使用ADD ../somepath,由於在執行docker build時首先作的就是把Dockerfile所在目錄包含子目錄發送給docker的守護進程。
                  ③若是<src>是一個url且<dest>不是以」/「結尾,則會下載文件並重命名爲<dest>。
                  ④若是<src>是一個url且<dest>以「/」結尾,則會下載文件到<dest>/<filename>,url必須是一個正常的路徑形式,「http://example.com」像這樣的url是不能正常工做的。
                  ⑤若是<src>是一個本地的壓縮包且<dest>是以「/」結尾的目錄,則會調用「tar -x」命令解壓縮,若是<dest>有同名文件則覆蓋,但<src>是一個url時不會執行解壓縮。
 
    COPY
        語法:COPY <src> <dest>
        解釋:用法與ADD相同,不過<src>不支持使用url,因此在使用docker build – < somefile時該指令不能使用。
 
    ENTRYPOINT
        語法:①ENTRYPOINT ["executable", "param1", "param2"]        #將會調用exec執行,首選方式
                  ②ENTRYPOINT command param1 param2             #將會調用/bin/sh -c執行
        解釋:ENTRYPOINT指令中指定的命令會在鏡像運行時執行,在Dockerfile中只能存在一個,若是使用了多個ENTRYPOINT指令,則只有最後一個指令有效。ENTRYPOINT指令中指定的命令(exec執行的方式)能夠經過docker run來傳遞參數,例如docker run <images> -l啓動的容器將會把-l參數傳遞給ENTRYPOINT指令定義的命令並會覆蓋CMD指令中定義的默認參數(若是有的話),但不會覆蓋該指令定義的參數,例如ENTRYPOINT ["ls","-a"],CMD ["/etc"],當經過docker run <image>啓動容器時該容器會運行ls -a /etc命令,當使用docker run <image> -l啓動時該容器會運行ls -a -l命令,-l參數會覆蓋CMD指令中定義的/etc參數。
        注意:①當使用ENTRYPOINT指令時生成的鏡像運行時只會執行該指令指定的命令。
                  ②當出現ENTRYPOINT指令時CMD指令只可能(當ENTRYPOINT指令使用exec方式執行時)被當作ENTRYPOINT指令的參數使用,其餘狀況則會被忽略。
 
    VOLUME
        語法:VOLUME ["samepath"]
        解釋:VOLUME指令用來設置一個掛載點,能夠用來讓其餘容器掛載以實現數據共享或對容器數據的備份、恢復或遷移,具體用法請參考其餘文章。
 
    USER
        語法:USER [username|uid]
        解釋:USER指令用於設置用戶或uid來運行生成的鏡像和執行RUN指令。
 
    WORKDIR
        語法:WORKDIR /path/to/workdir
        解釋:WORKDIR指令用於設置Dockerfile中的RUN、CMD和ENTRYPOINT指令執行命令的工做目錄(默認爲/目錄),該指令在Dockerfile文件中能夠出現屢次,若是使用相對路徑則爲相對於WORKDIR上一次的值,例如WORKDIR /data,WORKDIR logs,RUN pwd最終輸出的當前目錄是/data/logs。
 
    ONBUILD
        語法:ONBUILD [INSTRUCTION]
        解釋:ONBUILD指令用來設置一些觸發的指令,用於在當該鏡像被做爲基礎鏡像來建立其餘鏡像時(也就是Dockerfile中的FROM爲當前鏡像時)執行一些操做,ONBUILD中定義的指令會在用於生成其餘鏡像的Dockerfile文件的FROM指令以後被執行,上述介紹的任何一個指令均可以用於ONBUILD指令,能夠用來執行一些由於環境而變化的操做,使鏡像更加通用。
        注意:①ONBUILD中定義的指令在當前鏡像的build中不會被執行。
                  ②能夠經過查看docker inspeat <image>命令執行結果的OnBuild鍵來查看某個鏡像ONBUILD指令定義的內容。
                  ③ONBUILD中定義的指令會當作引用該鏡像的Dockerfile文件的FROM指令的一部分來執行,執行順序會按ONBUILD定義的前後順序執行,若是ONBUILD中定義的任何一個指令運行失敗,則會使FROM指令中斷並致使整個build失敗,當全部的ONBUILD中定義的指令成功完成後,會按正常順序繼續執行build。
                  ④ONBUILD中定義的指令不會繼承到當前引用的鏡像中,也就是當引用ONBUILD的鏡像建立完成後將會清除全部引用的ONBUILD指令。
                  ⑤ONBUILD指令不容許嵌套,例如ONBUILD ONBUILD ADD . /data是不容許的。
                  ⑥ONBUILD指令不會執行其定義的FROM或MAINTAINER指令。
相關文章
相關標籤/搜索