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

posted on 2017-12-13 09:53  残天  阅读(162)  评论(0)    收藏  举报

导航