以下是一些可以减少 Docker 镜像大小的技巧:
- 多阶段构建:通过在 Dockerfile 中定义多个 FROM 语句,使用不同的基础镜像来构建应用程序。这样可以确保最终镜像只包含必要的文件和依赖项,而不包含构建过程中的无关文件和依赖项。
例如,以下是一个 Node.js 应用程序的 Dockerfile 文件的示例:
FROM node:14-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:14-alpine AS runtime
ENV NODE_ENV production
WORKDIR /app
COPY --from=build /app/dist/ ./dist/
COPY package*.json ./
RUN npm install --only=production
CMD ["npm", "start"]
在本例中,Dockerfile 定义了两个 FROM 语句。第一个构建阶段使用 node:14-alpine 基础镜像,安装应用程序的依赖项并构建应用程序。第二个运行时阶段使用相同的基础镜像,但只复制构建阶段生成的 dist 目录和 package.json 文件,并仅安装生产依赖项。这样可以使最终镜像的大小更小。
删除不需要的文件和依赖项:在构建阶段结束时,尽可能删除构建过程中不需要的文件和依赖项。例如,删除构建工具和测试代码等。
使用轻量级基础镜像:选择小巧的基础镜像,例如 alpine,而不是使用较大的 ubuntu 或 centos 镜像。
将多个命令合并为单个 RUN 命令:将多次安装软件包或运行命令的操作合并到一个 RUN 命令中,以减少最终镜像的层数。
使用 .dockerignore 文件:在构建镜像时,Docker 会将 Dockerfile 和上下文目录中的所有文件都打包进镜像中。但是,可以通过创建 .dockerignore 文件来排除不需要包含在镜像中的文件和目录。
通过采用以上技巧和其他优化方法,可以尽可能地减小 Docker 镜像的大小,提高构建和部署效率。




