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