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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章