1 回复
Dockerfile中的ONBUILD指令的用途
ONBUILD
指令在 Dockerfile 中用于定义一个触发器,当该镜像被用作另一个镜像的基础镜像(即被其他 Dockerfile 通过 FROM
指令引用)时,会执行 ONBUILD
指令指定的命令。这个特性在创建可重用的镜像时非常有用,尤其是当你想要自动化构建流程,确保在基于你的镜像构建新镜像时执行某些预设步骤。
示例
假设你正在创建一个基础的开发环境镜像,这个环境需要安装一些开发工具并设置一些基本的配置。你可以使用 ONBUILD
指令来指定当这个镜像被用作其他镜像的基础时,自动执行安装依赖和配置环境的步骤。
基础镜像 Dockerfile(带有 ONBUILD 指令)
# 使用官方 Python 镜像作为基础
FROM python:3.8-slim
# 安装一些常用的开发工具
RUN apt-get update && apt-get install -y \
build-essential \
vim \
git
# 当此镜像被用作其他镜像的基础时,执行以下命令
ONBUILD COPY requirements.txt /app/
ONBUILD WORKDIR /app
ONBUILD RUN pip install -r requirements.txt
# 设置默认工作目录
WORKDIR /app
基于上述镜像的 Dockerfile
# 使用包含 ONBUILD 指令的基础镜像
FROM my-base-image
# 由于基础镜像中有 ONBUILD 指令,
# 这里的 Dockerfile 不需要显式地执行 COPY, WORKDIR, RUN 命令
# 当你构建这个 Dockerfile 时,基础镜像中的 ONBUILD 指令会自动执行
# 你现在可以添加其他特定的构建步骤
CMD ["python", "app.py"]
在上面的例子中,my-base-image
是包含 ONBUILD
指令的镜像。当你基于这个镜像构建新的镜像时,Docker 会自动执行 ONBUILD
指令中定义的命令,即复制 requirements.txt
文件到 /app/
目录,设置工作目录为 /app/
,并安装 requirements.txt
中列出的 Python 依赖。这使得你的基础镜像更加灵活和可重用。