Docker 前端环境部署 多阶段的实现

7 min read

Docker 支持多阶段构建,这允许您在单个 Dockerfile 中定义多个构建阶段。每个构建阶段都会生成一个镜像,并将其作为下一个阶段的基础镜像。

多阶段构建可以帮助您减小镜像的体积,同时保护您的应用程序的源代码。例如,您可以在第一个阶段中使用一个编译器构建您的应用程序,然后在第二个阶段中从第一个阶段中生成的镜像中删除编译器,从而减小镜像的体积。

要实现多阶段构建,您可以在 Dockerfile 中使用 FROM 命令多次,并为每个构建阶段定义不同的基础镜像。例如,下面的 Dockerfile 定义了两个构建阶段:

# Stage 1: Build the application
FROM node:latest as build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

# Stage 2: Create a lightweight image with the built application
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

在第一个构建阶段中,Docker 会基于 node:latest 镜像构建一个新镜像,并将其命名为 build。然后,Docker 会在该镜像中执行一些命令,构建您的应用程序。最后,Docker 会将构建后的应用程序放入镜像中

在第二个构建阶段中,Docker 会基于 nginx:alpine 镜像构建一个新镜像。然后,Docker 会使用 COPY --from=build 命令从第一个阶段中生成的 build 镜像中拷贝构建后的应用程序。最后,Docker 会将拷贝的应用程序放入新镜像中。

多阶段构建可以帮助您在构建应用程序时减小镜像的体积,并保护您的源代码。下面是更多关于多阶段构建的信息:

  • 您可以在 Dockerfile 中定义任意数量的构建阶段。每个构建阶段都会生成一个镜像,并将其作为下一个阶段的基础镜像。
  • 您可以使用 --from 参数与 COPY 命令一起拷贝构建阶段中的文件和目录。例如,COPY --from=build /app/dist /usr/share/nginx/html 命令会从 build 镜像中拷贝 /app/dist