Dockerfile 构建镜像之 ARG 指令详解

阅读时长 4 分钟读完

在使用 Docker 构建镜像的过程中,我们通常会使用 Dockerfile 文件来描述镜像的构建流程。Dockerfile 文件包含了一系列指令,它们被按序执行,最终生成一个构建好的镜像。而其中 ARG 指令,是用来设置构建镜像过程中的一些参数的,本文将详细介绍 ARG 指令的用法。

ARG 指令的语法和用法

ARG 指令的语法如下:

其中,<参数名> 即为 ARG 指令的参数名称。<默认值> 为可选项,表示当该参数没有被使用时,使用的默认值。如果在构建过程中需要使用该参数,则需要在 Dockerfile 文件中使用 ${<参数名>} 语法来引用该参数,表示将其替换为实际的值。

例如:

在上面的例子中,我们使用了 ARG APP_PORT=3000 来定义一个名为 APP_PORT 的参数,并设置其默认值为 3000。然后在 EXPOSE 指令中使用了 ${APP_PORT} 来引用该参数,表示将其替换为实际的值。

ARG 指令的应用场景

ARG 指令主要用于在构建阶段中传递参数,方便我们在构建镜像时根据不同的环境进行调整。它的应用场景包括但不限于:

构建参数化

当我们需要构建不同环境下的镜像时,比如不同的数据库地址、服务端口等,我们可以通过 ARG 指令来传递不同的参数值,方便我们构建不同的镜像。

例如:

在上面的例子中,我们使用了 ARG NODE_ENV=production 来定义一个名为 NODE_ENV 的参数,并设置其默认值为 production。然后在 ENV 指令中使用了 ${NODE_ENV} 来引用该参数,表示将其替换为实际的值。

同理,我们将 ARG DATABASE_URL 来定义一个名为 DATABASE_URL 的参数,并在 ENV 指令中使用了 ${DATABASE_URL} 来引用该参数,表示将其替换为实际的值。

最后,我们使用了 ARG APP_PORT=3000 来定义一个名为 APP_PORT 的参数,并设置其默认值为 3000。然后在 EXPOSE 指令中使用了 ${APP_PORT} 来引用该参数,表示将其替换为实际的值。

缓存优化

在使用 Docker 构建镜像时,Docker 会对每个指令进行缓存,以优化构建速度。因此,我们可以利用 ARG 指令来减少构建指令的重复,提高构建速度。

例如:

在上面的例子中,我们使用了 ARG SOURCE_COMMIT 来定义一个名为 SOURCE_COMMIT 的参数,在 LABEL 指令中使用了 ${SOURCE_COMMIT} 来引用该参数,表示将其替换为实际的值。

因此,当构建的时候,如果该参数没有改变,则该指令可以从缓存中读取,并且不需要重新构建。这样可以大大加快构建速度,提高效率。

ARG 指令的注意事项

在使用 ARG 指令时,需要注意以下事项:

  • ARG 指令需要在构建时传入相应的参数,请使用 --build-arg 参数进行传递,如:docker build --build-arg APP_PORT=4000 .

  • 如果在构建时没有传入 ARG 指令所需的参数,那么默认值将会生效。

  • 使用 ARG 指令定义的参数只在构建时有效,运行时不存在。

总结

本文简要介绍了 Dockerfile 中的 ARG 指令,包括它的语法和用法,应用场景以及注意事项。在实际使用中,我们可以根据不同的需要来使用 ARG 指令,以方便我们在构建镜像时传递参数,并提高构建效率。

示例代码:

-- -------------------- ---- -------
- ----------

--- -------------------
--- --------------------

--- ------------
--- ----------------------------

--- -------------
------ -----------

---- - ----
--- --- ------- -- --- --- -----

--- ------- --------

- ----
------ ----- ----------- -------------------- ----------- --------------------------------------- ----------- ------------- -

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6462129a968c7c53b036645c

纠错
反馈