FROM
FROM <image> [AS <name>]
或者
FROM <image>[:<tag>] [AS <name>]
或者
FROM <image>[@<digest>] [AS <name>]
FROM
指令初始化一个新的构建阶段以及设置基础镜像到随后的指令。因此,一个合法的 Dockerfile
必须以一个FROM指令开头。镜像可以是任何合法的镜像——从公共仓库里面拉取一个镜像尤其容易。
ARG
是唯一一个可以在FROM之前运行的Dockerfile
指令。FROM
可以出现多次在单个Dockerfile
中去创建多个镜像或者使用一个构建的过程作为另外一个构建过程的依赖。只需在每个新的FROM命令提交前记录上一次输出的镜像ID。每次的FROM都会清除先前指令的任何状态。- 在使用FROM指令是可以选择性地用
AS name
给新构建命名。这个名字可以附加在FROM
和COPY --from=<name|index>
的指令后面来引用这个阶段的镜像。 tag
和digest
的值是可选的。如果你省略他们,构建器会默认假设一个 latesttag
。构建器会返回一个错误如果它找不到tag
的值。
理解 ARG 和 FROM 如何互相影响
FROM
指令支持在第一个 FROM
前通过一些 AG
E 指令声明变量。
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app
FROM extras:${CODE_VERSION}
CMD /code/run-extras
ARG
在 FROM
之前声明是在构建阶段之外,所以在FROM
后,它不能被任何指令使用。为了可以使用使用在第一个FROM
之前定义的ARG
,可以在构建阶段里卖弄声明一个没有值的ARG
:
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version