dockerfile深入学习之初识dockerfile~1
dockerfile用于存放docker指令,通过dockerfile文件,docker可以自动构建镜像、用户可以通过docker build创建一个连续执行docker指令的自动构建程序
Usage
docker build通过dockerfile和相关上下文构建镜像,构建的上下文是在指定位置的目录或者URL的文件集
上下文构建递归进行,包括指定的path及其子目录、子文件
docker build . :表示以当前目录作为构建上下文
构建程序通过docker守护进行执行,在通常情况下,尽量使用一个空目录作为构建上下文,并且不要在dockerfile中加入docker 构建无关的文件
Warning:不要使用/root路径作为上下文路径,否则docker build会将整个硬盘中的数据传入docker守护进程中
可以通过不需要参与构建的文件写入.dockerignore文件中,如此一来,在docker build时,会忽略掉其中的内容,提升构建效率
在默认情况下,dockerfile在路径中以"Dockerfile"为文件名,位于docker context的根目录,也可以自己指定一个路径,使用"-f"指定之后,docker构建镜像时会自动在指定路径下寻找Dockerfile
docker build -f /path/to/a/Dockerfile .
如果构建成功,可以指定一个存储库和标签来保存新镜像:
docker build -t shykes/myapp .
可以通过-t生成多个标签:
docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .
docker build对dockerfile中的指令是逐条执行的,在生成最终镜像时,docker daemon会自动删除上下文
Note:每条指令单独运行,每次运行指令时都会生成新的镜像
--cache-from:使用指定的镜像构建缓存
Format
dockerfile内容格式:
# Comment(描述、注释)
INSTRUCTION(指令) arguments(参数)
指令区分大小写,但通常约定指令大写,以便于同参数区分
dockerfile必须以FROMR指令开始
# Comment #代表注释(注释中不支持换行符)
RUN echo 'we are running some # of cool things'
Parser directives(解析器指令)
解析器指令用于提示解析器进行特殊处理,对于parser directives有以下需要几点需要注意:
1 可以不添加该指令,如果需要用于,必须放在dockerfile的第一行,否则会被当成注释处理
2 字母不区分大小写,不过约定情况下都使用小写
3 不支持换行符
根据以上规则,以下为非法形式:
1 换行无效
# direc \
tive=value
2 出现两次无效
# directive=value1
# directive=value2
3 没有写在第一行无效
FROM ImageName
# directive=value(此处因为写在了from指令的后面,会被当成注释)
# About my dockerfile
# directive=value(同上)
FROM ImageName
4 未知指令无效
# unknowndirective=value
注:对于解析器指令 中间可以有空格,以下几种形式等效
#directive=value
# directive =value
# directive= value
# directive = value
# dIrEcTiVe=value
浙公网安备 33010602011771号