乐闻世界logo
搜索文章和话题

如何在 Docker 中创建多阶段构建?

3 个月前提问
3 个月前修改
浏览次数16

1个答案

1

在Docker中使用多阶段构建可以减少最终镜像的大小,优化构建过程,同时可以保持Dockerfile的可维护性。多阶段构建的核心思想是在单个Dockerfile中定义多个构建阶段,但最终只取最后一个阶段生成的镜像作为最终产品。这样做的优点是可以在前面的阶段使用大型基础镜像来构建和编译应用程序,而后面的阶段则可以使用更精简的镜像来运行应用程序。

下面我将通过一个具体的例子来演示如何在Docker中创建多阶段构建。假设我们需要构建一个简单的Node.js应用程序:

第一阶段:构建阶段

在第一阶段,我们使用一个包含Node.js和npm的较大基础镜像来安装依赖并构建我们的应用程序。这个阶段不需要包括应用运行时不必要的工具,比如编译器。

Dockerfile
# 使用较大的Node基础镜像来构建应用 FROM node:14 AS builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . . RUN npm run build

第二阶段:运行阶段

在第二阶段,我们使用一个较小的基础镜像来运行应用程序。这个镜像只需要能够运行Node.js应用的最小环境。

Dockerfile
# 使用更小的基础镜像来运行应用 FROM node:14-slim WORKDIR /app COPY --from=builder /app/build /app EXPOSE 3000 CMD ["node", "app.js"]

在上面的Dockerfile中,我们定义了两个阶段:builder和运行阶段。在builder阶段,我们使用node:14镜像来安装依赖并构建应用。然后,在运行阶段,我们使用node:14-slim镜像,并从builder阶段复制已构建的应用到运行环境。这样做的结果是最终的镜像只包含运行Node.js应用所必需的文件,从而显著减少了镜像的大小。

这个方法不仅可以减少镜像大小,还有助于减少潜在的安全风险,因为运行镜像中没有包括用于构建应用的多余工具和依赖。

2024年8月9日 14:08 回复

你的答案