跳到主要内容

docker部署

dockerfile

FROM node:18-alpine as build-stage
RUN npm install pnpm -g
WORKDIR /app
COPY package.json package-lock.json pnpm-lock.yaml /app/
RUN pnpm install
COPY . .
RUN npm run build \
& rm -rf src node_modules \
& pnpm install --only=production
EXPOSE 3000
CMD [ "npm", "run", "start"]

简单讲解一下几个注意的点:

  1. 将install和build分开,这样可以最大限度的利用缓存,提升构建速度。如果package.json、package-lock.json pnpm-lock.yaml这三个文件没有变化,那么pnpm install 这一步就可以直接使用缓存。
  2. 为什么要删除src、node_modules?其实在生产环境下,我们只会使用到.next目录,所以我们需要删除一些体积较大的文件,比如src、node_modules。
  3. 为什么又要使用 pnpm install --only=production, 因为只安装生产环境依赖,可以进一步减少构建的体积。

构建并启动容器

  1. 构建镜像:docker build -t next-app:1.0 .
  2. 启动容器:
    docker run \
    -d \
    --name my-next-app \
    -u root \
    -p 3000:3000 \
    --restart=always \
    next-app:1.0
  3. 查看日志:docker logs -f my-next-app
  4. 查看容器:docker ps