Dockerfile(1) - FROM 指令详解

news/2024/10/19 2:21:22/

FROM

  • 指明当前的镜像基于哪个镜像构建
  • dockerfile 必须以 FROM 开头,除了 ARG 命令可以在 FROM 前面
FROM [--platform=<platform>] <image> [AS <name>]FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

小栗子

FROM alpine:latest

一个 dockerfile 可以有多个 FROM

  • 可以有多个 FROM 来创建多个镜像,或区分构建阶段,将一个构建阶段作为另一个构建阶段的依赖项
  • AS <name> 就是命名当前构建阶段
  • 在后续构建阶段,可以给 FROM、COPY 指令用上,通过 引用前面构建的镜像

--from=<name>

# 第一构建阶段:将仅用于生成 requirements.txt 文件
FROM tiangolo/uvicorn-gunicorn:python3.9 as requirements-stage# 将当前工作目录设置为 /tmp
WORKDIR /tmp# 生成 requirements.txt
RUN touch requirements.txt# 第二构建阶段,在这往后的任何内容都将保留在最终容器映像中
FROM python:3.9# 将当前工作目录设置为 /code
WORKDIR /code# 复制 requirements.txt;这个文件只存在于前一个 Docker 阶段,这就是使用 --from-requirements-stage 复制它的原因
COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt# 运行命令
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt# 复制
COPY ./app /code/app

了解 ARG 和 FROM 如何交互

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

ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-appFROM extras:${CODE_VERSION}
CMD  /code/run-extras

注意

  • 在 FROM 之前声明的 ARG 在构建阶段之外,因此不能在 FROM 之后的任何指令中使用
  • 要使用在第一个 FROM 之前声明的 ARG 的默认值,要在构建阶段内声明一次没有值的 ARG 指令
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version

http://www.ppmy.cn/news/89843.html

相关文章

完美解决vue3 keep-alive多个路由使用同一个组件的缓存问题

之前页面少的话 用keep-live结合router-view&#xff0c;使用keep-live的include属性就可以自己决定keep-live缓存那些组件不缓存那些组件&#xff0c;直到遇到个问题。 平时写的代码如下&#xff1a; <router-view v-slot"{ Component, route }"><keep-al…

java面试应聘时的满分回答参考模板

java面试应聘时的满分回答参考模板 1、请你自我介绍一下自己好吗?2、你觉得你个性上最大的优点是什么?3、说说你最大的缺点?4、你对薪资的要求?5、你对加班的看法?6、如果通过这次面试我们录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?7、谈谈你对跳槽…

第3章 单元测试-测验题-作业

在单元测试中&#xff0c;&#xff08;B &#xff09;是用来代替被测模块的子模块的。 驱动模块桩模块通讯模块代理模块在下面列举的测试覆盖中&#xff0c;&#xff08;D &#xff09;是最强的逻辑覆盖准则。 语句覆盖条件覆盖判定覆盖条件组合覆盖一个判定中的复合条件表达式…

【A卡,Windows】stable diffusion webui下载安装避坑指南

观前提醒 本文内容都是本人亲身经历的&#xff0c;一个一个安装下载测试所感&#xff0c;当然如果你更想用傻瓜式集成包的&#xff0c;那还是跳过这篇文章吧。 当然我不推荐这篇文章的操作&#xff0c;因为我用了差不多1h才有一副图&#xff0c;有N卡&#xff0c;就用N卡&…

零基础如何入门网络安全?2023年专业学习路线看这篇就够了

前景 很多零基础朋友开始将网络安全作为发展的大方向&#xff0c;的确&#xff0c;现如今网络安全已经成为了一个新的就业风口&#xff0c;不仅大学里开设相关学科&#xff0c;连市场上也开始大量招人。 那么网络安全到底前景如何&#xff1f;大致从市场规模、政策扶持、就业…

RockChip3568 MPP硬解码和gstreamer1.0编译

MPP视频硬件解码编译 一、配置rock sdk的环境 当前使用的rockchip 给的rk3568的sdk包&#xff0c;版本不详&#xff0c;应该比较新。 编译前配置环境&#xff1a; source envsetup.sh 选择rk3568配置 &#xff08;67 rockchip_rk3568&#xff09;注意&#xff1a; 每次在s…

内网渗透(八十四)之ADCS配置启用基于SSL的LDAP(LDAPS)

ADCS配置启用基于SSL的LDAP(LDAPS) 打开AD CS,选择证书颁发机构 选择证书模板,右键管理 选择Kerberos身份验证,右键 复制模板 然后会有一个Kerberos身份验证的副本,右键更改名称,更改为LDAPS 选择LDAPS,右键属性 设置模板属性,请求处理——>允许导出私钥(O) 创建证书…

基于中序有序的二叉搜索树

文章目录 什么是二叉搜索树二叉搜索树的中序遍历二叉搜索树的查找查找的非递归写法查找的递归写法 二叉搜索树的插入非递归递归 二叉搜索树的删除非递归递归 二叉搜索树的使用场景k模型kv模型 什么是二叉搜索树 二叉搜索树是普通二叉树的升级&#xff0c;普通二叉树除了存储数…