Docker多阶段构建是一种优化镜像构建过程的方法,可以减少最终镜像的大小。下面是一个使用多阶段构建的示例,包含了三个阶段:构建、编译和运行。
首先,我们创建一个名为Dockerfile的文件,其中包含了三个阶段的指令。假设我们的应用程序是一个简单的Node.js应用,目录结构如下:
.
├── src
│ └── index.js
└── package.json
以下是Dockerfile的内容:
# 第一阶段:构建阶段
FROM node:12-alpine AS builder
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
# 第二阶段:编译阶段
FROM node:12-alpine AS compiler
WORKDIR /app
COPY --from=builder /app .
RUN npm prune --production
# 第三阶段:运行阶段
FROM node:12-alpine
WORKDIR /app
COPY --from=compiler /app .
CMD ["npm", "start"]
解释一下上面的Dockerfile:
第一阶段:构建阶段
node:12-alpine
作为基础镜像。/app
。package.json
文件到工作目录。npm install
安装依赖。npm run build
进行构建。第二阶段:编译阶段
node:12-alpine
作为基础镜像。/app
。npm prune --production
删除开发依赖。第三阶段:运行阶段
node:12-alpine
作为基础镜像。/app
。CMD
指令定义容器启动时要运行的命令。通过这种多阶段构建的方式,最终构建出的镜像只包含运行时所需的文件,不包含开发和构建过程中产生的文件,从而减小了镜像大小。