Dockerfile(1) - FROM 指令详解

FROM

  • 指明当前的镜像基于哪个镜像构建
  • dockerfile 必须以 FROM 开头,除了 ARG 命令可以在 FROM 前面
python 复制代码
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>

python 复制代码
# 第一构建阶段:将仅用于生成 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 指令声明的变量

python 复制代码
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 指令
python 复制代码
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
测试小小怪下士44 分钟前
单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)
功能测试·单元测试·测试用例·集成测试·压力测试·模块测试·安全性测试
牧魂.2 小时前
软件测试入职要求汇总
自动化测试·软件测试·功能测试·接口测试·性能测试
Dreams°1238 小时前
【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
大数据·功能测试·单元测试
编码小袁9 小时前
蓝桥杯:编程爱好者的试炼场
职场和发展·蓝桥杯
惜.己12 小时前
Jmeter中的配置原件(三)
功能测试·测试工具·jmeter·1024程序员节
惜.己16 小时前
Jmeter中的配置原件(五)
功能测试·测试工具·jmeter·github·1024程序员节
少喝冰美式18 小时前
大语言模型在序列推荐中的应用
人工智能·程序人生·自然语言处理·大模型·大语言模型·计算机技术·大模型应用
_OLi_18 小时前
力扣 LeetCode 27. 移除元素(Day1:数组)
算法·leetcode·职场和发展
寻道模式20 小时前
【时间之外】IT人求职和创业应知【32】-RTE二次出现
人工智能·职场和发展
百晓生说测试21 小时前
15:00面试,15:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展