Dockerfile(1) - FROM 指令詳解


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM