我将为您详细讲解如何利用 Dockerfile 优化 Nestjs 构建镜像大小。
1. Nestjs 构建镜像大小优化方案
构建 Docker 镜像时,我们经常发现镜像大小过大,不利于快速部署和传输。下面是一些在构建 Nestjs 项目镜像过程中优化镜像大小的方案:
1.1 使用多阶段构建
可以使用多阶段构建来减少镜像大小,在第一阶段中编译应用程序,然后在第二阶段中使用最小化的 Node.js 映像运行应用程序。这样可以减少生成的镜像大小,并提高构建速度。
# 第一阶段
FROM node:14-alpine AS builder
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile && yarn cache clean
COPY . .
RUN yarn build
# 第二阶段
FROM node:14-alpine
WORKDIR /app
COPY --from=builder /app/package.json /app/yarn.lock ./
RUN yarn install --frozen-lockfile --production && yarn cache clean
COPY --from=builder /app/dist /app/dist
CMD ["node", "dist/main"]
1.2 缩小依赖项
可以通过按需添加依赖项来减少构建的镜像大小。可以使用 "--production"
或 "--pure-lockfile"
参数安装依赖项,只安装必要的依赖项,减少冗余依赖项。
RUN yarn install --frozen-lockfile --production
或者,可以在 package.json
文件中使用 "optionalDependencies"
,标记在安装时不需要的依赖项。这样在安装依赖项时,可以忽略 optionalDependencies
引入的依赖项。
1.3 删除缓存和不必要的文件
Docker 镜像构建时,可以使用 --no-cache
参数强制 Docker 不使用缓存。还可以使用 .dockerignore
文件忽略不必要的文件,只复制必要的文件到镜像中。
docker build --no-cache -t my-app .
1.4 使用现有的 Node.js 映像
为了提高构建速度和减少镜像大小,可以使用现有的 Node.js 映像。可以使用 alpine 版本的 Node.js 映像来减少镜像大小。
FROM node:14-alpine
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --production && yarn cache clean
COPY dist /app/dist/
CMD ["node", "dist/main"]
2. 示例说明
下面提供两个示例说明如何优化 Nestjs 构建镜像大小:
2.1 示例一
在这个示例中,我们使用多阶段构建来减小镜像大小。
a. 首先,我们创建一个名为 Dockerfile
的文件。
# 第一阶段 - 构建应用程序
FROM node:14-alpine AS builder
WORKDIR /app
COPY package.json yarn.lock ./
# 先只安装生产依赖,减少镜像大小
RUN yarn install --frozen-lockfile --production && yarn cache clean
# 安装全量依赖
RUN yarn install --frozen-lockfile && yarn cache clean
COPY . .
RUN yarn build
# 第二阶段 - 运行应用程序
FROM node:14-alpine
WORKDIR /app
# 复制依赖项和构建好的应用程序
COPY --from=builder /app/package.json /app/yarn.lock ./
COPY --from=builder /app/dist /app/dist
CMD ["node", "dist/main"]
b. 接着,我们执行以下命令来构建 Docker 镜像。
docker build -t my-app .
c. 最后,我们运行镜像。
docker run --rm -p 3000:3000 my-app
2.2 示例二
在这个示例中,我们使用 alpine 版本的 Node.js 映像来减小镜像大小。
a. 首先,我们创建一个名为 Dockerfile
的文件。
FROM node:14-alpine
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --production && yarn cache clean
COPY dist /app/dist/
CMD ["node", "dist/main"]
b. 接着,我们执行以下命令来构建 Docker 镜像。
docker build -t my-app .
c. 最后,我们运行镜像。
docker run --rm -p 3000:3000 my-app
以上就是利用 Dockerfile 优化 Nestjs 构建镜像大小的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Dockerfile优化Nestjs构建镜像大小详情 - Python技术站