Docker build的多阶段构建允许你在一个Dockerfile中使用多个FROM
指令,每个指令可以定义一个不同的基础镜像。这样,你可以在一个阶段安装和配置所有必要的软件,然后在另一个阶段仅复制必要的文件到最终的镜像中。这有助于减小最终镜像的大小,提高构建速度和运行效率。
以下是一个简单的多阶段构建示例:
# 第一阶段:基于Node.js构建开发环境
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 第二阶段:基于Python构建生产环境
FROM python:3.8-slim
WORKDIR /app
COPY --from=builder /app/dist /app/dist
COPY --from=builder /app/node_modules /app/node_modules
CMD ["python", "app.py"]
在这个示例中,我们使用了两个不同的基础镜像:node:14
和python:3.8-slim
。在第一阶段,我们安装了Node.js依赖项并构建了应用程序。在第二阶段,我们仅复制了构建好的文件(dist
目录)和Node.js模块到基于Python的镜像中,并设置了运行命令。
要构建这个多阶段构建的Docker镜像,请在包含Dockerfile的目录中运行以下命令:
docker build -t my-app .
这将创建一个名为my-app
的Docker镜像,其中包含了优化后的生产环境。