FROM

参考:FROM

语法

FROM <image> [AS <name>]
FROM <image>[:<tag>] [AS <name>]
FROM <image>[@<digest>] [AS <name>]

FROM指令通常作为Dockerfile指令的开始语句,其初始化一个新的构建阶段,并为后续指令设置基础镜像

ARG和FROM的交互

指令ARG用于声明键值对,其可声明在任何位置,如果声明在第一个FROM指令之前,即可作用于所有的FROM指令

$ cat Dockerfile 
ARG CODE_VERSION=18.04
FROM zjzstu/ubuntu:${CODE_VERSION}

RUN apt-get update && apt-get install -y tree

ENTRYPOINT ["/usr/bin/tree"]
CMD ["-L", "1"]

每个FROM指令都表示开始一次新的构建,会清除之前设置的指令,包括ARG。如果想要让FROM指令之后的指令能够使用第一个FROM指令之前设置的ARG值,可以在FROM指令后声明ARG

$ cat Dockerfile
ARG CODE_VERSION=18.04
FROM zjzstu/ubuntu:${CODE_VERSION}
ARG CODE_VERSION
RUN echo ${CODE_VERSION}

构建镜像过程中输出CODE_VERSION

$ docker build -t arg:v1 .
Sending build context to Docker daemon  81.82MB
Step 1/4 : ARG CODE_VERSION=18.04
Step 2/4 : FROM zjzstu/ubuntu:${CODE_VERSION}
 ---> 5493327e7708
Step 3/4 : ARG CODE_VERSION
 ---> Running in 52229319295c
Removing intermediate container 52229319295c
 ---> 047fcfd13f1b
Step 4/4 : RUN echo ${CODE_VERSION}
 ---> Running in 0f4ff5a42f32

18.04  // 这里
Removing intermediate container 0f4ff5a42f32
 ---> d729d58eb86f
Successfully built d729d58eb86f
Successfully tagged arg:v1