Dockerfile文件解析

什么是 Dockerfile?

Dockerfile是用于构建自定义 Docker 镜像的文本文件,是由一系列命令和参数构成的脚本。我们通过docker build命令把 Dockerfile 构建成镜像。

Dockerfile 文件的基本结构

Dockerfile一般分为:基础镜像、镜像元信息、镜像操作指令和容器启动时执行指令。

Dockerfile 文件说明

Docker 从上到下的顺序运行 Dockerfile 的指令。字符为 Dockerfile 中的注释。文件一般命名为 Dockerfile

Dockerfile 常用的指令

  • FROM 指令

FROM是指定基础镜像,定制的镜像都是基于 FROM 的镜像。

格式:	
	FROM <image>
	FROM <image>:<tag>
	FROM <image>@<digest>
其中 tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像。
示例:FROM node:12.14.1
  • MAINTAINER 指令

MAINTAINER用来声明维护者信息,但该命令已经过期,推荐使用 LABEL。

格式:
	MAINTAINER <name> 镜像维护者的姓名和邮箱地址
  • LABEL 指令

LABEL用于添加元数据到镜像,声明构造信息、作者、机构等。LABEL 是以键值对形式出现。

格式:
	LABEL <key>=<value> <key>=<value> ...
  • ENV

设置环境变量,在后续的指令中,就可以使用这个环境变量。

格式:
	ENV <key> <value>  #<key>后面的所有内容均视为<value>的一部分,因此一次只能设置一个变量。
	ENV <key>=<value> <key>=<value> ...  #可设置多个环境变量。
我们可以通过 ${key} 在其它指令中来引用变量, 也可以通过 docker run 中的 -e <ENV> 来动态赋值。
  • ARG 指令

构建参数,与 ENV 作用一至。不过作用域不一样。ARG设置的环境变量仅对 Dockerfile 内有效,也就是说只有docker build的过程中有效,构建好的镜像内不存在此环境变量。
ARG用于传递给构建运行时的变量。ARG 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令docker build中用--build-arg <参数名>=<value>来覆盖。

格式:
	ARG <参数名>[=<默认值>]

在1.13之前的版本,要求--build-arg中的参数名,必须在 Dockerfile 中用 ARG 定义过,否则会报错退出构建。从1.13开始这种严格的限制被放开,不再报错退出,而是显示警告信息,并继续构建。

  • WORKDIR 指令

WORKDIR指定工作目录。在创建容器后,终端默认登录进入的目录。

格式:
	WORKDIR <PATH>

通过 WORKDIR 设置工作目录,Dockerfile 中的其它指令 RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

  • ADD 指令

ADD用于将本地文件添加到镜像中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

格式:
	ADD <源路径src> <目标路径dest>
  • COPY 指令

COPY的功能类似于ADD,但是不会自动解压文件,也不能访问网络资源。

  • RUN 指令

RUN用来执行构建镜像时的命令。

格式:
	shell 执行格式:RUN <命令行>
	exec 执行格式:RUN ["可执行文件", "参数1", "参数2"]

RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用缓存镜像,可在docker build构建时指定--no-cache参数。

  • CMD 指令

CMD是在容器启动时才执行的命令。格式跟RUN类似。如果Dockerfile中存在多个 CMD 指令,仅最后一个生效。

  • ENTRYPOINT 指令

ENTRYPOINTCMD非常类似,不同的是通过docker run执行命令携带的参数不会覆盖ENTRYPOINT,而是传递给它。

  • EXPOSE 指令

EXPOSE是声明运行时容器提供服务端口号。

格式:
	EXPOSE [<port>...]
  • VOLUME 指令

VOLUME用于指定持久化目录。

VOLUME ["<路径1>", "<路径2>"...]

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

  • USER 指令

USER指定运行容器时的用户名或 UID。

USER <用户名>[:<用户组>]

如果使用USER指定用户,Dockerfile 中其它命令 RUNCMDENTRYPOINT都将使用该用户。你可以通过docker run运行容器时,可以通过-u参数来覆盖指定用户。

  • ONBUILD 指令

ONBUILD作用是当所构建的镜像被用做其它镜像的基础镜像,该镜像中的ONBUILD 命令就会触发。

ONBUILD <其它指令>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值