Docker學習入門(4)

1、Dockerfile指令

(1)指令格式    ①註釋  #Comment

          ②指令  INSTRUCTION argument

(2)第一個Dockerfile             

①FROM    FROM <image>  或    FROM <image>:<tag>    必須是一個存在的鏡像,基礎鏡像,必須是第一條非註釋的指令

②MAINTAINER    MAINTAINER <name>   指定鏡像的作者信息,包含鏡像的所有者和聯繫信息

③RUN    指定當前鏡像中運行的命令

    RUN <command> (shhell 模式)

       /bin/sh -c command

    RUN ["executable", "param1", "param2"]  (exec模式)

       RUN["/bin/bash", "-c", "echo hello"]

④EXPOSE   EXPOSE <port> [<port>...]   指定運行該鏡像的容器使用的端口

(3)其他指令

①CMD   容器運行時執行,區別於RUN指令(在鏡像構建過程中)

     CMD <command>  param1 param2  (shhell 模式)

     CMD ["executable", "param1", "param2"]  (exec模式)

     CMD ["param1", "param2"] (作爲 ENTERYPOINT 指令的默認參數)

                

利用該Dockerfile構建鏡像,如下


利用構建出的鏡像啓動一個容器


如果在運行容器時指定運行的命令如下,則會覆蓋CMD指令中的命令,如下



②ENTERYPOINT    ENTERYPOINT ["executable", "param1", "param2"] (exec模式)

          ENTERYPOINT command param1 param2 (shell模式)

        與CMD指令類似,不同的是:默認在容器啓動時指定得命令不會覆蓋dockerfile文件中ENTERYPOINT 指令;

       如果需要覆蓋,可以使用docker run --enterypoint 進行覆蓋

③ADD   ADD <src> ...<dest> 或者 ADD ["<src>"..."<dest>"]適用於文件路徑中有空格的情況) 

④COPY   COPY <src> ...<dest> 或者 COPY ["<src>"..."<dest>"]適用於文件路徑中有空格的情況 

    ADD vs. COPY:

        ADD 包含類似tar的解壓功能;如果單純複製文件,Docker推薦使用COPY指令

⑤VOLUME    VOLUME ["/data"] 用於向 基於鏡像構建的容器 添加捲

⑥WORKDIR    用於在基於鏡像構建的容器中指定工作目錄

    WORKDIR /path/to/workdir  應該使用絕對路徑,如果使用了相對路徑,則路徑會發生傳遞

       比如 WORKDIR /a

          WORKDIR b

          WORKDIR c

          RUN pwd    結果爲 /a/b/c

⑦ENV    用於設置環境變量,與WORKDIR類似

    ENV <key> <value> 或者 ENV <key>=<value>...

⑧USER    指定鏡像會以什麼樣的用戶去運行    USER daemon

    如:USER nginx  基於該鏡像啓動的容器,就會以nginx用戶的身份運行

   也可以在USER指令中使用uid、 group、 gid,或者是這4種的組合使用,例如:

    USER user    USER user:group    USER user:gid

    USER uid     USER uid:gid      USER uid:group

⑨ONBUILD    用於爲鏡像添加觸發器    ONBUILD [INSTRUCTION]

    鏡像觸發器:當一個鏡像被其他鏡像作爲基礎鏡像時執行,會在構建過程中插入指令

2、Dockerfile構建過程

(1)從基礎鏡像運行一個容器; 執行一條指令,對容器做出修改; 執行類似docker commit的操作,提交一個新的鏡像層;

再基於剛提交的鏡像運行一個新容器; 執行dockerfile中的下一條指令,直至所有指令執行完畢

 

這樣我們就可以利用這些中間層鏡像進行調

(2)構建緩存,例如:


如果不想使用緩存:docker build --no-cache

(3)查看鏡像構建的過程:  docker history [image]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章