1 基本結(jié)構(gòu)
Dockerfile 由一行行命令語句組成,并且支持以 # 開頭的注釋行藻烤。
一般的绷雏,Dockerfile 分為四部分基礎(chǔ)鏡像信息、維護(hù)者信息怖亭、鏡像操作指令和容器啟動時執(zhí)行指令涎显。
ps:每運行一條 RUN 指令,鏡像添加新的一層兴猩,并提交期吓。
CMD 指令,來指定運行容器時的操作命令倾芝。
2 指令
? FROM
? MAINTAINER
? RUN
? CMD
? EXPOSE
? ENV
? ADD
? COPY
? ENTRYPOINT
? VOLUME
? USER
? WORKDIR
? ONBUILD
下面分別解釋每個指令:
2.1 FROM
- 格式為 FROM <image>或FROM <image>:<tag>讨勤。
- 第一條指令必須為 FROM 指令箭跳。并且,如果在同一個Dockerfile中創(chuàng)建多個鏡像時潭千,可以使用多個 FROM 指令(每個鏡像一次)谱姓。
2.2 MAINTAINER
- 格式為 MAINTAINER <name>
- 指定維護(hù)者信息。
2.3 RUN
- 格式為 RUN <command> 或 RUN ["executable", "param1", "param2"]刨晴。
- 每條 RUN 指令將在當(dāng)前鏡像基礎(chǔ)上執(zhí)行指定命令屉来,并提交為新的鏡像。當(dāng)命令較長時可以使用 \ 來換行狈癞。
- 前者將在 shell 終端中運行命令茄靠,即 /bin/sh -c;后者則使用 exec 執(zhí)行蝶桶。
2.4 CMD
-
支持三種格式
- CMD ["executable","param1","param2"] 使用 exec 執(zhí)行嘹黔,推薦方式;
- CMD command param1 param2 在 /bin/sh 中執(zhí)行莫瞬,提供給需要交互的應(yīng)用;
- CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認(rèn)參數(shù)郭蕉;
指定啟動容器時執(zhí)行的命令疼邀,每個 Dockerfile 只能有一條 CMD 命令。如果指定了多條命令召锈,只有最后一條會被執(zhí)行旁振。
如果用戶啟動容器時候指定了運行的命令,則會覆蓋掉 CMD 指定的命令涨岁。
2.5 EXPOSE
- 格式為 EXPOSE <port> [<port>...]拐袜。
- 告訴 Docker 服務(wù)端容器暴露的端口號,供互聯(lián)系統(tǒng)使用梢薪。在啟動容器時需要通過 -P蹬铺,Docker 主機會自動分配一個端口轉(zhuǎn)發(fā)到指定的端口。
2.6 ENV
- 格式為 ENV <key> <value>秉撇。
- 指定一個環(huán)境變量甜攀,會被后續(xù) RUN 指令使用,并在容器運行時保持琐馆。
2.7 ADD
- 格式為 ADD <src> <dest>规阀。
- 該命令將復(fù)制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目錄的一個相對路徑瘦麸;也可以是一個 URL谁撼;還可以是一個 tar 文件(自動解壓為目錄)。
2.8 COPY
- 格式為 COPY <src> <dest>滋饲。
- 復(fù)制本地主機的 <src>(為 Dockerfile 所在目錄的相對路徑)到容器中的 <dest>厉碟。
- 當(dāng)使用本地目錄為源目錄時喊巍,推薦使用 COPY。
2.9 ENTRYPOINT
-
兩種格式:
- ENTRYPOINT ["executable", "param1", "param2"]
- ENTRYPOINT command param1 param2(shell中執(zhí)行)墨榄。
配置容器啟動后執(zhí)行的命令玄糟,并且不可被 docker run 提供的參數(shù)覆蓋。
每個 Dockerfile 中只能有一個 ENTRYPOINT袄秩,當(dāng)指定多個時阵翎,只有最后一個起效。
2.10 VOLUME
- 格式為 VOLUME ["/data"]之剧。
- 創(chuàng)建一個可以從本地主機或其他容器掛載的掛載點郭卫,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。
2.11 USER
- 格式為 USER daemon背稼。
- 指定運行容器時的用戶名或 UID贰军,后續(xù)的 RUN 也會使用指定用戶。
2.12 WORKDIR
- 格式為 WORKDIR /path/to/workdir蟹肘。
- 為后續(xù)的 RUN词疼、CMD、ENTRYPOINT 指令配置工作目錄帘腹。
- 可以使用多個 WORKDIR 指令贰盗,后續(xù)命令如果參數(shù)是相對路徑,則會基于之前命令指定的路徑阳欲。
2.13 ONBUILD
- 格式為 ONBUILD [INSTRUCTION]舵盈。
- 配置當(dāng)所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎(chǔ)鏡像時,所執(zhí)行的操作指令球化。
3 創(chuàng)建鏡像
docker build -t myrepo/myapp /tmp/test1/