NestJS部署到Docker指南

在将NestJS应用部署到Docker时遇到几个问题想请教:

  1. 我的NestJS项目已经开发完成,但不知道如何编写适合的Dockerfile?能否分享一个标准的NestJS Dockerfile模板?

  2. 在构建Docker镜像时,发现node_modules也被打包进去了,导致镜像体积很大。请问如何优化Dockerfile来减小镜像尺寸?

  3. 使用docker-compose部署时,NestJS应用需要连接MongoDB,如何正确配置容器间的网络连接?

  4. 生产环境部署时,应该选择哪个Node.js基础镜像比较好?是-alpine版本还是slim版本?

  5. 在Docker容器中运行时,NestJS的热重载功能失效了,这在开发时很不方便,有没有解决方案?

  6. 如何为容器化的NestJS应用配置日志收集?现在日志都输出到容器内部,不方便查看。


3 回复

首先,创建一个Dockerfile文件。从Node.js基础镜像开始,设置工作目录,拷贝项目文件并安装依赖:

FROM node:16-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .

接着构建生产环境镜像并暴露端口:

RUN npm run build
EXPOSE 3000
CMD ["node", "dist/main"]

构建镜像:docker build -t my-nestjs-app .

运行容器:docker run -p 3000:3000 my-nestjs-app

为了方便管理,可以使用docker-compose.yml配置服务、网络和卷:

version: '3'
services:
  nestjs:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules

使用docker-compose up启动应用。如果修改代码,只需重启容器即可看到更新,无需重新构建镜像。记得开放服务器防火墙端口并确保网络安全。


  1. 创建项目:首先确保你已经用NestJS创建好了一个项目。

  2. 安装Docker相关依赖:在项目根目录下初始化package.json,然后安装@nestjs/cli@nestjs/common等必要依赖。接着安装docker相关的镜像构建工具,如dockerfile生成器。

  3. 编写Dockerfile

    # 使用官方Node.js运行时镜像作为基础镜像
    FROM node:16-alpine
    
    # 创建应用工作目录
    WORKDIR /usr/src/app
    
    # 安装项目依赖
    COPY package*.json ./
    RUN npm install --production
    
    # 复制项目文件到容器中
    COPY . .
    
    # 暴露端口
    EXPOSE 3000
    
    # 启动应用
    CMD ["npm", "run", "start:prod"]
    
  4. 构建Docker镜像:在项目根目录下执行命令docker build -t nestjs-app .

  5. 运行容器:使用docker run -p 3000:3000 nestjs-app来启动你的NestJS应用。

  6. 优化与发布:可以将生成的镜像推送到Docker Hub或其他私有镜像仓库以便后续部署或团队共享。记得设置环境变量和配置数据库连接等信息。

NestJS部署到Docker指南

基本步骤

  1. 创建Dockerfile
# 阶段一:构建应用
FROM node:16-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 阶段二:生产运行
FROM node:16-alpine

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist

EXPOSE 3000
CMD ["node", "dist/main"]
  1. 创建docker-compose.yml
version: '3'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

部署步骤

  1. 确保已安装Docker和Docker Compose
  2. 在项目根目录创建上述文件
  3. 运行以下命令:
docker-compose build
docker-compose up -d

优化建议

  1. 使用.dockerignore文件忽略不必要的文件
  2. 多阶段构建减少镜像体积
  3. 考虑添加健康检查
  4. 对于生产环境,建议使用PM2等进程管理工具

常见问题

  • 端口冲突:检查3000端口是否被占用
  • 构建失败:确保本地能正常构建后再Docker化
  • 环境变量:通过-e.env文件传递必要变量

部署后可通过http://localhost:3000访问应用。

回到顶部