在 Dockerfile 文件中,ARG 和 ENV 都是用来设置环境变量的指令。不过它们之间有些许不同之处,本文将重点介绍这两者的区别和使用方法,并提供相应的示例代码。
ARG 指令
ARG
指令用于定义构建参数,可以在构建时传递参数以更改 Dockerfile 中的值。ARG 指令的值也可以用于后面的 FROM
指令。下面是一个简单的使用示例:
# Dockerfile 文件 ARG version=latest FROM ubuntu:$version
在上述示例中,我们定义了一个名为 version
的构建参数,并设置其默认值为 latest
。这个构建参数也可以在构建时被修改。
构建命令:
docker build --build-arg version="18.04" -t myimage:1.0 .
运行上述命令后,Docker 将使用 18.04
替换原本的默认值 latest
。
需要注意的是,ARG 指令的值只能在 Dockerfile 中使用,在容器中无法使用。此外,ARG 指令的值只在构建环节中有效,Docker 容器运行后并不能通过 echo $arg_name
来获取参数值。
ENV 指令
ENV
指令用于指定容器中的环境变量。它们可以在容器内部使用,并且也可以由外部传入。
下面是一个使用 ENV
指令的示例:
# Dockerfile 文件 FROM ubuntu:latest ENV MY_NAME="John Doe" CMD echo "Hello $MY_NAME"
在上述示例中,我们定义了名为 MY_NAME
的环境变量,并在 CMD 中使用 $MY_NAME
输出到控制台。现在我们运行这个容器:
docker run myimage:1.0
此时将会看到输出 Hello John Doe
。
需要注意的是,ENV 指令的值不仅能够在 Dockerfile 中使用,在容器内部运行时同样可以被访问到。而 ARG 指令只能在构建环节中使用。
总结
ARG
指令用于设置构建参数,只有在构建 Docker 镜像时有效。ENV
指令用于设置运行容器的环境变量,可以从外部传入并用于容器内部。- 如果想要将命令行参数传递给 Dockerfile,可以使用 ARG 指令;如果想要配置容器内部的环境变量,可以使用 ENV 指令。
- 在 Dockerfile 内部,可以使用
${ARG_NAME}
或者${ENV_NAME}
访问环境变量的值。
希望本文对你理解 Dockerfile 中 ARG 与 ENV 的区别和使用提供了帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65025e2b95b1f8cacdfab12e