一、Dockerfile的格式
Dockerfile的格式如下:
# Comment
以“#”开头的行为注释行。跨行注释也必须加“#”,Dockerfile不支持连续字符“”。命令解析指令也是以“#”开头,命令解析器是一个可选项,位于Dockerfile的首行,只允许出现一次,第二次出现则被认为是注释,在解析器中换行符同样是不被支持的,但是其中的非断行空格是允许的。
#directive=value
# directive =value
# directive= value
# directive = value
# escap
Escape在dockerfile中被用作转义字符和换行符,如果不特别指定,系统默认的转义字符为: (反斜杠)。转义不能在RUN命令中执行,除非位于行末进行格式换行。作为换行符时,escape允许Dockerfile指令跨行执行。反引号在Windows下非常有用(举例可以参阅官方文档)
# escape=\ (反斜杠)
或
# escape=` (反引号)
INSTRUCTION arguments
INSTRUCTION一般被称为指令或者命令,对大小写不敏感,为了与其他参数区别开,习惯大写。
.dockerfileignore file
使用Dockerfile构建镜像时最好是将Dockerfile放置在一个新建的空目录下。然后将构建镜像所需要的文件添加到该目录中。为了提高构建镜像的效率,你可以在目录下新建一个.dockerignore文件来指定要忽略的文件和目录。.dockerignore文件的排除模式语法和 Git的.gitignore文件相似。
二、相关指令详解
FROM
每个Dockerfile必须以FROM指令开头,FROM指明了当前镜像创建的基镜像,也就是说每个镜像必须基于一个已存在的镜像进行创建。FROM指令后直接跟基镜像的名称或者镜像名称加标签。镜像的名称和标签可以去Docker Hub或者使用命令docker search keyword 进行搜索。用法如下:
FROM <image>
或
FROM <image>[:<tag>]
ARG
ARG指令定义了用户可以在创建镜像时或者运行时传递的变量,申明于调用类似于shell中的变量申明与定义。
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
ENV
ENV指令用来定义镜像的环境变量,并且可以引用已经存在的环境变量,例如:HOME、HOSTNAME、PATH。ENV的值跟ARG指令申明的变量一样可以传递、被引用,定义方法也基本一致。