Dockerfile多个from的使用及多个build-arg的使用示例

本文介绍了Dockerfile中的多阶段构建(multipleFROM)和build-arg功能。多阶段构建允许将编译环境和运行环境分开,减少最终镜像的大小。build-arg则能在构建过程中传入参数。示例展示了如何从一个临时镜像(buildImage)复制jar包到运行时镜像(runtimeImage),创建新的应用镜像。
摘要由CSDN通过智能技术生成

多个from

  从docker17.05版本开始,新增了Dockerfile多阶段(multistage)构建,dockerfile中允许使用多个FROM指令。
  多个 FROM 指令并不是为了生成多根的层关系,最后生成的镜像仍以最后一条 FROM 为准,之前的 FROM 会被抛弃,那么之前的FROM 又有什么意义呢?
  每一条 FROM 指令都是一个构建阶段,多条 FROM 就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。
  该特性最大的使用场景是可以使编译环境和发布环境分离。详见下文示例。

多个build-arg

  使用 --build-arg 可以在build时将参数传入到Dockerfile中,执行build命令示例如下:
  docker build --build-arg TMP_IMAGE=“xxx:latest” --build-arg RUNTIME_IMAGE=“xxx/java-8-runtime:latest” -t newImageName:0.0.1 .
  Dockerfile中需要使用ARG命令定义变量名,并使用 ${参数名} 来获取参数值,注意:在FROM之后用的,需要再次使用ARG命令定义。 Dockerfile示例详见下文示例。

Dockerfile示例

##############
# 把 buildImage 编译好的临时镜像中的jar包拷贝到runtimeImage 中
# build 成新的 镜像
##############
ARG TMP_IMAGE
ARG RUNTIME_IMAGE
FROM ${TMP_IMAGE} as stage-temp

MAINTAINER comtoper@163.com

ARG RUNTIME_IMAGE

FROM  ${RUNTIME_IMAGE}
# 把第一个 FROM 的镜像中的文件,拷贝到 第二个FROM 的镜像中
COPY --from=stage-temp /opt/app-root/app.jar /usr/local/s2i/app-root/
COPY --from=stage-temp /usr/local/s2i/run /usr/local/s2i/

WORKDIR /usr/local/s2i
CMD ["/usr/local/s2i/run"]

# docker build --build-arg TMP_IMAGE="xxx:latest" --build-arg RUNTIME_IMAGE="xxx/java-8-runtime:latest" -t newImageName:0.0.1 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祺稷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值