簡(jiǎn)介
Dockerfile是由一系列指令和參數(shù)構(gòu)成的腳本,一個(gè)Dockerfile里面包含了構(gòu)建整個(gè)鏡像的完整命令。通過(guò)docker build執(zhí)行Dockerfile中的一系列指令自動(dòng)構(gòu)建鏡像。
常見(jiàn)命令注解
FROM:基礎(chǔ)鏡像动分,F(xiàn)ROM命令必須是Dockerfile的首個(gè)命令。
LABEL:為鏡像生成元數(shù)據(jù)標(biāo)簽信息。(維護(hù)鏡像常用信息)
USER:指定運(yùn)行容器時(shí)的用戶(hù)名或UID,后續(xù)RUN也會(huì)使用指定用戶(hù)芽偏。
RUN:RUN命令是Dockerfile執(zhí)行命令的核心部分。它接受命令作為參數(shù)并用于創(chuàng)建鏡像弦讽。每條RUN命令在當(dāng)前基礎(chǔ)鏡像上執(zhí)行污尉,并且會(huì)提交一個(gè)新鏡像層。
WORKDIR:設(shè)置CMD指明的命令的運(yùn)行目錄往产。為后續(xù)的RUN被碗、CMD、ENTRYPOINT仿村、ADD指令配置工作目錄锐朴。
ENV:容器啟動(dòng)的環(huán)境變量。
ARG:構(gòu)建環(huán)境的環(huán)境變量蔼囊。(指定Dockerfile的環(huán)境變量)
COPY:復(fù)制指令焚志,從上下文目錄中復(fù)制文件或者目錄到容器里指定路徑
CMD:容器運(yùn)行時(shí)執(zhí)行的默認(rèn)命令衣迷。
ENTRYPOINT:指定容器的“入口”。
HEALTHCHECK:容器健康狀態(tài)檢查酱酬。
ADD: 指令和 COPY 的使用格式一致(同樣需求下壶谒,官方推薦使用 COPY)。
功能也類(lèi)似膳沽,不同之處如下:
ADD 的優(yōu)點(diǎn):在執(zhí)行 <源文件> 為 tar 壓縮文件的話汗菜,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會(huì)自動(dòng)復(fù)制并解壓到 <目標(biāo)路徑>贵少。
ADD 的缺點(diǎn):在不解壓的前提下呵俏,無(wú)法復(fù)制 tar 壓縮文件。會(huì)令鏡像構(gòu)建緩存失效滔灶,從而可能會(huì)令鏡像構(gòu)建變得比較緩慢普碎。具體是否使用,可以根據(jù)是否需要自動(dòng)解壓來(lái)決定
示例
#基于nginx:1.17.9鏡像構(gòu)建
FROM nginx:1.17.9
#指定信息
LABEL maintainer="Insane@ceshiren.com"
#設(shè)置環(huán)境變量
ENV NGINX_VERSION 1.17.9
ARG work_pwd=/data/html/
#切換root用戶(hù)
USER root
#執(zhí)行命令录平,安裝curl軟件麻车,設(shè)置軟鏈接把nginx服務(wù)的日志顯示到終端輸出
RUN apt-get -yq update && apt-get install -y curl && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
#掛載卷
VOLUME ["/data"]
#設(shè)置工作目錄
WORKDIR $work_pwd
#復(fù)制index.html 文件到WORKDIR目錄下。
COPY index.html .
#映射80端口
EXPOSE 80
#此處 CMD 作為 ENTRYPOINT 的參數(shù)斗这。
CMD ["nginx", "-g", "daemon off;"]
# CMD ["-g", "daemon off;"]
# CMD nginx -g daemon off
# 設(shè)置容器啟動(dòng)的命令
# ENTRYPOINT ["nginx", '-g", daemon off;"]
STOPSIGNAL SIGRTMAX
# 檢查容器健康动猬,通過(guò)訪問(wèn) Nginx 服務(wù)80端口,來(lái)判斷容器服務(wù)是否健康
HEALTHCHECK --interval=5s --timeout=3s \
CMD curl -fs http://locaLhost/ || exit 1
構(gòu)建鏡像
docker build -t [$name]:[v1] [DockerfilePath]
-t:指定標(biāo)簽表箭,n為鏡像名赁咙,1為版本號(hào)