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ù)是相對路徑,則會基于之前命令指定的路徑。