• Dockerfile(1)


    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-app
    
    FROM 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
  • 相关阅读:
    HihoCoder1105 题外话·堆(基础二叉搜索树)
    HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)
    HihoCoder1078线段树的区间修改(线段树+lazy)
    HihoCoder1070 区间最小值(简单线段树)
    HDU3577Fast Arrangement(线段树+lazy)
    POJ2985 The k-th Largest Group (并查集+treap)
    HihoCoder1337 动态第k大(treap)
    STL的erase函数和lower_bound
    HihoCoder1329 平衡树·Splay(附STL版)
    etcd 在超大规模数据场景下的性能优化
  • 原文地址:https://www.cnblogs.com/poloyy/p/15465435.html
Copyright © 2020-2023  润新知