Docker 多阶段构建是一种在 Dockerfile 中使用多个 FROM
指令的方法,它允许你将构建过程分为多个阶段,每个阶段都有自己的文件系统和依赖。这样可以实现更高效的镜像构建,减小最终镜像的大小。
要实现多阶段构建,请按照以下步骤操作:
- 在 Dockerfile 中,使用
FROM
指令定义多个构建阶段。每个阶段都应该有一个唯一的名称。例如,你可以将构建过程分为两个阶段:build
和final
。
# 第一阶段:构建 FROM node:14 AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 第二阶段:最终镜像 FROM nginx:latest COPY --from=build /app/dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
在这个例子中,我们使用了 Node.js 镜像作为构建环境,将应用程序代码复制到容器中,安装依赖项,运行构建命令(例如 npm run build
),然后将构建好的文件复制到最终的 Nginx 镜像中。
-
使用
COPY --from
指令将构建阶段生成的文件复制到最终的镜像中。--from
指令的参数包括源镜像名称、源文件系统路径和目标文件系统路径。 -
在每个阶段中,你可以根据需要安装依赖项、复制文件、运行命令等。
-
在完成所有阶段的构建后,Docker 将生成一个新的镜像,其中包含了所有阶段的结果。
注意:在使用多阶段构建时,请确保在每个阶段中使用正确的镜像作为基础镜像,以便在构建过程中安装依赖项和运行命令。同时,请注意在每个阶段中清理不必要的文件和缓存,以减小最终镜像的大小。