Dockerfile結構
通常dockfile包含4部分
- 基礎鏡像
- 維護者信息
- 鏡像操作指令
- 容器啟動時執(zhí)行指令
dockerfile示例
?#這是一個示例
?#基于ubuntu image
?#version 2
?#author:me
?#command format: Instruction [arg/command]
?
?#第一行必須是指定的基礎鏡像
?FROM ubuntu
?
?#維護者信息血当,名稱和信箱
?MAINTAINER dockeruser docker@docker.com
?
?#鏡像的操作指令,每執(zhí)行一次run指令,鏡像就添加一層
?RUN echo “deb http://archive.ubuntu.com/ubuntu/ raring main universe ” >>/etc/apt/ources.list
?RUN apt-get update && apt-get install -y nginx
?
?#容器啟動時執(zhí)行的指令
?CMD /usr/sbin/nginx
操作指令
1.FROM
?FROM image,引出基礎鏡像。一個dockerfile可以引入多個基礎鏡像。
2.MAINTAINER
?MAINTAINER <name>指定維護者信息
3.RUN
?RUN <command> 在shell終端中運行命令,即/bin/sh -C
?RUN["executable","param1","param2"] 使用exec執(zhí)行。
?命令較長時怠褐,可以使用\換行
4.CMD
?指定容器啟動時執(zhí)行的命令,每個dockerfile只能有1條CMD命令您宪,多個CMD只會執(zhí)行最后一條奈懒。容器啟動時,指定了運行命令宪巨,則會覆蓋到dockerfile里的CMD命令磷杏。
?* CMD ["executable","para1","para2"]使用exec執(zhí)行,推薦使用揖铜。
?* CMD command para1 para2 在/bin/sh中執(zhí)行茴丰,提供給需要交互的應用达皿。
?* CMD ["para1","para2"]提供給ENTRYPOINT的默認參數(shù)天吓。
5.EXPOSE
?EXPOSE<port> [<port>]指定暴露給主機的端口贿肩。
6.ENV
?ENV <key> <value>指定環(huán)境變量,后續(xù)的run指令使用,并在容器運行期間保持
7.ADD
?ADD <src> <dest>將src指定目錄或url的文件或目錄龄寞,復制到容器的dest
8.COPY
?COPY <src> <dest>對于dockerfile所在目錄現(xiàn)對路徑文件或目錄汰规,復制到容器的dest,dest不存在會自動創(chuàng)建物邑。
9.ENTRYPOINT
? 配置容器啟動后執(zhí)行的命令溜哮,不能被docker run提供的參數(shù)覆蓋。每個dockerfile只能有一個ENTRYPOINT色解,多個ENTRYPOINT只有最后一個生效茂嗓。
?ENTRYPOINT ["executable","para1","para2"]
?ENTRYPOINT command para1 para2(在shell中執(zhí)行)。
10.VOLUME
? VOLUME [“/data”] 創(chuàng)建一個可以從宿主機或其他容器掛載的掛載點科阎。
11.USER
?USER daemon指定容器運行時的用戶名或uid述吸,也可以在RUN時指定用戶
12.WORKDIR
?WORKDIR /path/to/workdir 為后續(xù)的RUN、CMD锣笨、ENTRYPOINT指定配置工作目錄蝌矛,可以使用多個WORKDIR指令,后續(xù)命令如果參數(shù)是相對目錄错英,則會基于之前命令的路徑入撒。
13.ONBUILD
?配置從當前鏡像創(chuàng)建其他鏡像時,執(zhí)行的指令
創(chuàng)建鏡像
docker build
?編寫為dockerfile后椭岩,通過該命令來創(chuàng)建鏡像茅逮。docker build [option] path 讀取指定路徑下(含子目錄)的dockerfile,并將該路徑下所有內容發(fā)送給docker服務端判哥,有服務端來創(chuàng)建鏡像氮唯,因此一般建議防止dockerfile的目錄為空目錄。