> For the complete documentation index, see [llms.txt](https://camelgemonion.gitbook.io/docker/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://camelgemonion.gitbook.io/docker/dockerfile-zhi-ling/from/le-jie-arg-he-from-zhi-jian-de-jiao-hu-fang-shi.md).

# 了解ARG和FROM之间的交互方式

**FROM指令**支持任何在第一个**FROM**之前出现的**ARG指令**所声明的变量。

```
ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-app

FROM extras:${CODE_VERSION}
CMD  /code/run-extras
```

在**FROM**之前声明的**ARG指令**处于构建阶段之外，因此，**FROM**之后的任何指令都不能使用它。如果需要使用在第一个**FROM**之前用**ARG指令**声明的变量的值，可以在构建阶段内部使用不带变量值的**ARG（ARG variable的形式）指令**：

```
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version
```

```
ARG VERSION=7
ARG FIRSTNAME="Larry"
ARG LASTNAME="Wall"
FROM centos:$VERSION
ARG VERSION # 将ARG声明的变量引用到构建阶段内部
ARG FIRSTNAME # 同上
ARG LASTNAME  # 同上
RUN echo $VERSION; echo $FIRSTNAME; echo $LASTNAME
CMD ["sh", "-c", "echo Process finished!"]
```
