docker Dockerfile

Dockerfile 介紹

它是一個文本文件,鏡像文件構建腳本
由一些列用于根據基礎鏡像構建新的鏡像文件的專用指令序列組成

Dockerfile command

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • MAINTANIER
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

FROM

必須是第一個非注釋行,用于指定所用到的基礎鏡像

語法格式
  • FROM <image>[:<tag>]
  • FROM <image>@<digest>

注意: 盡量不要在一個dockerfile中使用多個FROM指令

MAINTANIER

用于提供信息的指令,用于讓作者提供本人的信息
建議緊跟在FROM以后,不限制出現的位置

語法格式

MAINTANIER <authors detail>

COPY

用于docker主機復制文件指向正在創建的映像文件中

語法格式
  • COPY SRC DEST
  • COPY "SRC"... "DEST"
解釋
  • src: 要復制的源文件或目錄,支持使用通配符
  • dest: 目錄路徑,正在創建的鏡像文件的文件系統路徑,建議使用絕對路徑,否則,則相對于WORKDIR而言,所有復制生成的目錄文件的uid和gid均為0
注意
  • src 必須是build上下文中的路徑,因此不能使用類似"../some"的路徑
  • src 如果是目錄,遞歸復制會自動行,如果有多個src ,包括src上使用了通配符這種情況,此時,dest必須是目錄,而且必須以/結尾
  • dest 如果事先不存在,它將被自動創建,包括其父目錄

ADD

類似于COPY指令,額外還支持復制tar文件,以及URL語法

語法格式
  • ADD SRC DEST
  • ADD "SRC" ... "DEST"
注意
  • 以url格式指定的源文件,下載完成后其目標文件的權限為600
  • 如果src是url,且dest不以/結尾,則src指定的文件將被下載并直接被創建為dest, 如果dest以/結尾,則url指定的文件被下載至dest中,并保留原名
  • 如果src是一個tar文件,它將被展開為一個目錄,其行為類似于tar -x 命令,但是如果通過url下載到的文件是tag格式的,是不會自動被展開的

ENV

定義環境變量,此變量可被當前dockerfile文件中的其它指令調用
調用格式為$varaible_name或者${variable_name}

語法格式
  • ENV <key> <value> 一次定義一個變量
  • ENV <key>=<value> ... 一次定義多個變量 如果value中有空白字符,如要用\字符進行轉義
注意
  • ENV 定義的環境變量在鏡像運行的整個過程中一直存在
  • 因此可以使用inspect命令查看,甚至可以再docker run啟動此鏡像時候,使用--env選項來修改制定的環境值

USER

指定運行鏡像時候, 或運行Dockerfile文件中的任何RUN,CMD,/ENTRYPORINT指定的程序時的用戶名或者UID

語法格式
  • USER <uid>|<USERNAME>
注意
  • UID 應該使用/etc/passwd 文件存在的用戶的UID,否則,docker run可能會出現錯誤

WORKDIR

用于為Dockerfile中所有的指令指定工作目錄

語法格式
  • WORKDIR <dirpath>
注意
  • WORKDIR 可出現多次,也可使用相對路徑,此時表示相對于前一個WORKDIR指令指定的路徑
  • WORKDIR 還可以調用ENV定義的環境變量的值

VOLUME

用于目標鏡像文件中創建一個掛載點的目錄,用于掛載主機上的卷或者其它容器的卷

語法格式
  • VOLUME <mountpoint>
  • VOLUME ["<mountpoint>" .... ]

RUN

于指定docker build命令過程中運行的命令

語法格式
  • RUN <COMMAND>
  • RUN ["executeable" ,"<param1>" ,"<param2>" ]
注意
  • 每個run命令就額外加一層,所以建議一個RUN指令執行多個命令

CMD

類似于RUN指令,用于運行程序,但二者運行的是場景不同
CMD在docker run時運行而非docker build,CMD指令的首
要目的為了在于為啟動的容器指定默認要運行的程序程序
運行結束, 容器也就結束,不過,CMD指令指定的程序可被
docker run命令行參數中執行的要運行的程序所覆蓋

語法格式
  • CMD <COMMAND>
  • CMD ["executeable" ,"<param1>" ,"<param2>" ]
  • CMD ["<para1>","<param2>"]
注意
  • 第三種為ENTRYPOINT指令指定的程序的默認參數
  • 如果dockefile中存在多個CMD指令,只會最后一個生效

ENTRYPOINT

類似于CMD,為容器指定默認的啟動程序,不會被docker run
所運行的程序所覆蓋.而且這些命令行參數,會被當作參數送
給ENTRYPOINT指令指定的程序但是如果運行docker run時,
使用了 --entrypoint選項,此選項的參數可當作要運行的程序覆蓋
ENTRYPOINT指令指定的程序

語法格式
  • ENTRYPOINT <COMMAND>
  • ENTRYPOINT ["executeable" ,"<param1>" ,"<param2>" ]

EXPOSE

用于為容器指定要暴露的端口

語法格式
  • EXPOSE <PORT>[/<PROTOCAL>] [<PROT></PROTOCAL>]
  • PROTOCAL: 默認為tcp,可以是tcp或者udp
例如 eg:
  • EXPOSE 11211/tcp 11211/udp

ONBUILD

定義觸發器

當前dockerfile構建出的鏡像被用作基礎鏡像,去構建其他鏡像的時候,ONBUILD指令指定的操作才會被執行

語法格式
  • ONBUILD <instruction>
  • ONBUILD ADD my.conf /etc/mysql/my.conf
注意

ONBUILD不能自我嵌套,且不會觸發FROM和MAINTERNATER指令

docker command

docker build -t bdshello  .     #創建image鏡像構建Dockerfile 
docker run -p 4000:80 bdshello  #啟動bdshello容器 映射端口
docker run -d -p 4000:80 bdshello  #后臺啟動
docker container ls             #顯示所有啟動的容器
docker container ls -a          #顯示所有容器包括不啟動的
docker container stop <hash id>     #優雅停止容器 
docker container kill  <hash id>    #強制停止容器
docker container rm <hash id>       #移除容器 
docker container rm  $(docker container ls -a -q)  #移除所有容器 
docker image ls -a                #列出所有鏡像 
docker image rm <image id>        #刪除鏡像
docker image rm $(docker image ls -a -q)  #刪除所有鏡像
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容