我正在构建最终容器的 2 个变体,一个是完整版,另一个是瘦版。两种变体都分两步构建容器:
full/slim 构建都有相同的第二步,它们只是使用不同的基础容器。我想概括第二步,所以我不会有两个 Dockerfiles 包含相同的内容,只是不同的 FROM 字段。
所以我想知道将最后一步作为单个 Dockerfile 的最佳方法是什么,它将生成 2 个图像并且仅在 2 个不同的 FROM 之间切换。我在考虑几种不同的方法:
但我想知道,有没有更好的方法?或者我错过了什么?
您可以将构建时配置与ARG 一起使用。
FROM 指令支持由出现在第一个 FROM 之前的任何 ARG 指令声明的变量。在 FROM 之前声明的 ARG 在构建阶段之外,因此不能在 FROM 之后的任何指令中使用。要使用在第一个 FROM 之前声明的 ARG 的默认值,请使用在构建阶段内没有值的 ARG 指令:
Dockerfile:
ARG imagename
FROM $imagename
RUN echo $imagename
Run Code Online (Sandbox Code Playgroud)
使用两个不同的基础镜像运行:
docker build --build-arg imagename=alpine .
Run Code Online (Sandbox Code Playgroud)
输出:
Step 1/3 : ARG imagename
Step 2/3 : FROM $imagename
latest: Pulling from library/alpine
ff3a5c916c92: Pull complete
Digest: sha256:e1871801d30885a610511c867de0d6baca7ed4e6a2573d506bbec7fd3b03873f
Status: Downloaded newer image for alpine:latest
---> 3fd9065eaf02
Step 3/3 : RUN echo $imagename
---> Running in 96b45ef959c3
Removing intermediate container 96b45ef959c3
---> 779bfc103e9e
Successfully built 779bfc103e9e
Run Code Online (Sandbox Code Playgroud)
或者:
docker build --build-arg imagename=busybox .
Run Code Online (Sandbox Code Playgroud)
结果是:
Step 1/3 : ARG imagename
Step 2/3 : FROM $imagename
latest: Pulling from library/busybox
07a152489297: Pull complete
Digest: sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
Status: Downloaded newer image for busybox:latest
---> 8c811b4aec35
Step 3/3 : RUN echo $imagename
---> Running in 6027fe4f5b7b
Removing intermediate container 6027fe4f5b7b
---> 28640f123967
Successfully built 28640f123967
Run Code Online (Sandbox Code Playgroud)
另请参阅此博文了解更多想法。
| 归档时间: |
|
| 查看次数: |
4230 次 |
| 最近记录: |