docker系列四 dockerfile

docekrfile由一行行的命令語句組成,并且支持以 # 開頭的注釋行。

一般情況下,dockerfile文件由四部分組成:基礎(chǔ)鏡像信息,維護(hù)者信息,鏡像操作指令 和 容器啟動時執(zhí)行指令。

#第一行必須指定基礎(chǔ)鏡像信息
FROM ubuntu
#維護(hù)者信息
MAINTAINER docker_user docker_user@email.com
#鏡像的操作指令
RUN apt-get update && apt-get install -y nginx
#容器啟動時執(zhí)行指令
CMD /usr/sbin/nginx

說明:一開始必須指明所基于的鏡像名稱,接下來一般會說明維護(hù)者信息。后面則是鏡像的操作指令,例如RUN指令,RUN指令對鏡像執(zhí)行跟隨的命令。每運(yùn)行一條RUN指令,鏡像添加新的一層,并提交。最后是CMD指令,來指定運(yùn)行容器時的操作命令。

常用指令說明:

1、FROM

 格式為 FROM <image> 或者 FROM<image>:<tag>。FORM指令必須是第一條,如果在同一個dockerfile文件中創(chuàng)建多個鏡像時,可以使用多個FROM指令(每個鏡像使用一次)。

2、MAINTAINER

 格式為 MAINTAINER <name> 指定維護(hù)者信息

3、RUN

 格式為 RUN <command> 或 RUN ["executable(可執(zhí)行的)","param1(參數(shù)1)","param2"]。每一條RUN指令將在當(dāng)前鏡像的基礎(chǔ)上執(zhí)行指定命令,并提交為新的鏡像,當(dāng)命令較長時可以使用 \ 來換行。

常用來在基礎(chǔ)鏡像中安裝各種依賴軟件或者運(yùn)行某些腳本。

4、CMD

 支持三種格式:
 CMD ["executable(可執(zhí)行的)","param1(參數(shù)1)","param2"] 使用exec執(zhí)行,推薦方式
 CMD command param1 param2 在/bin/sh 中執(zhí)行,提供給需要交互的應(yīng)用
 CMD ["param1(參數(shù)1)","param2"]提供給ENTRYPOINT的默認(rèn)參數(shù)
 指定啟動容器時執(zhí)行的命令,每個dockerfile只能有一條CMD命令。如果指定了多條命令,只有最后一條會被執(zhí)行。

 如果用戶在啟動容器時指定了運(yùn)行的命令,則會覆蓋掉CMD指定的命令。

5、EXPOSE

 格式為 EXPOSE <port> [<port> ...]      例如:EXPOSE  80  22  8080
 告訴docker服務(wù)端容器暴露的端口號,供互聯(lián)系統(tǒng)使用,在啟動容器時需要通過 -P, docker 主機(jī)會自動分配一個端口轉(zhuǎn)發(fā)到指定端口,使用-p 則可以指定一個具體的本地端口映射過來。

6、ENV

 格式為 ENV <key> <value>。指定一個環(huán)境變量,會被后續(xù)RUN指令使用,并在容器運(yùn)行時保持。

7、ADD

 格式為 ADD <src> <dest>。該命令將復(fù)制指定的<src> 到容器中的<dest>。其中<src> 可以是dockerfile所在目錄的一個相對路徑(文件或目錄),也可以是一個URL,還可以是一個tar文件(自動解壓為一個目錄)。

8、COPY

 格式為 COPY <src> <dest>。復(fù)制本地主機(jī)的<src>(為dockerfile所在目錄的相對路徑,文件或目錄)為容器中的<dest>。目標(biāo)路徑不存在時,會自動創(chuàng)建。當(dāng)使用本地目錄為源目標(biāo)時,推薦使用COPY。

注釋:
異:ADD 更擅長讀取本地tar文件并解壓 和 通過URL從遠(yuǎn)程服務(wù)器讀取資源并復(fù)制到鏡像中
同:都可以從本地主機(jī)將文件復(fù)制到鏡像中,同等條件下優(yōu)先選擇 COPY指令

9、ENTRYPOINT

 有兩種格式:
 ENTRYPOINT  ["executable(可執(zhí)行的)","param1(參數(shù)1)","param2"]
 eg:ENTRYPOINT ["java","-jar","/admin.jar"]
 ENTRYPOINT command param1 param2 ( shell中執(zhí)行 )
 配置容器啟動后執(zhí)行的命令,并且不可被docker run提供的參數(shù)覆蓋。每個dockerfile文件中只能存在一個ENTRYPOINT,當(dāng)指定多個ENTRYPOINT時,只有最后一個生效。

10、VOLUME

 格式為 VOLUME ["/data"]。創(chuàng)建一個可以從本地主機(jī)或其他容器掛載的掛載點(diǎn),一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。

12、WORKDIR

 格式為 WORKDIR /path/to/workdir。為后續(xù)的RUN、CMD、ENTRYPOINT指令配置工作目錄。
 可以使用多個WORKDIR指令,后續(xù)命令如果參數(shù)是相對路徑,則會基于之前命令指定的路徑。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容