Dockerfile FROM指令 语法解析

您所在的位置:网站首页 platform语法 Dockerfile FROM指令 语法解析

Dockerfile FROM指令 语法解析

2023-07-15 20:11| 来源: 网络整理| 查看: 265

  凡是编写Dockerfile,几乎开始都会是FROM命令,它决定了Dockerfile构建出的镜像为何物,本文就来了解一下FROM的语法、语义以及对应的示例。

  语法

FROM [--platform=] [AS ] FROM [--platform=] [:] [AS ] FROM [--platform=] [@] [AS ]

  语义

  1. FROM指令开始一个新的构建阶段,设置后续构建依赖的基础镜像,Dockerfile必须以FROM开始。镜像可以是任意有效镜像。

  示例:在nginx:latest镜像基础上,直接创建一个新的镜像。

FROM nginx CMD /bin/bash

在这里插入图片描述

  2. Dockerfile必须以FROM指令开始(除ARG指令之外),否则会出现"Please provide a source image with from prior to commit"。

CMD echo "Before FROM" FROM nginx CMD /bin/bash

在这里插入图片描述

  3. FROM可以在一个Dockerfile中出现多次,以创建多个镜像或者将当前构建作为另一个构建的依赖。

  4. 通过向FROM指令添加AS name,可以选择为新生成阶段指定名称。该名称可以在后续的FROM和COPY --FROM=指令中使用,以引用在此阶段中构建的镜像。

  示例:详细应用示例会在系列博文中展示。

FROM nginx AS firstNginx CMD /bin/bash

  5. tag或者digest的值是可选的。如果省略其中任何一个,则默认情况下,构建器使用latest作为默认值。如果找不到tag的值,则构建器返回错误。

  示例:直接不存在的镜像nginx:109,下载出现错误。

FROM nginx:109 CMD /bin/bash

在这里插入图片描述

  6. --platform可以用于指定镜像的平台,用来处理那些支持多平台的镜像。例如:linux/amd64、linux/arm64或windows/amd64。默认情况下,使用生产请求的平台。全局生成参数可用于此标志的值,例如:自动平台参数允许您强制一个阶段到本机构建平台(--platform=$BUILDPLATFORM),并使用它交叉编译到阶段内部的目标平台。

  示例:nginx:latest作为基础镜像,指定--platform=linux/arm64进行镜像构建。

FROM --platform=linux/arm64 nginx CMD /bin/bash

在这里插入图片描述

在这里插入图片描述

  7. FROM与ARG

  上文(2)中曾提到过, Dockerfile必须以FROM指令开始(除ARG指令之外),下面来看下FROM与ARG的关系。

  7.1 FORM的参数支持在FORM之前由ARG定义的变量。

  示例:在FROM之前通过ARG定义变量NG_VERSION,在FROM中引用变量。

ARG NG_VERSION=1.19.3 FROM nginx:${NG_VERSION} CMD /bin/bash

在这里插入图片描述

在这里插入图片描述

  7.2 FORM之前声明的ARG参数游离在构建阶段之外,所以不可以在FORM之后的任何指令中使用。如果想使用FORM前声明的带有默认值的ARG,需要在构建阶段通过ARG声明没有值的同名参数。

ARG NG_VERSION=1.19.3 FROM nginx:${NG_VERSION} ARG NG_VERSION RUN echo "${NG_VERSION}" CMD /bin/bash

在这里插入图片描述

  总结

  FROM指令应用非常简单,但一定要注意文中罗列的7项内容,避免在实际应用中,由于失误等原因造成不必要的麻烦,本文演示的示例都很简单,都是基于镜像直接创建新的镜像,但如何使用Dockerfile构建镜像基本也就是这样了。

  若文中存在错误和不足,欢迎指正!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3