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"]
简单讲解一下几个注意的点:
- 将install和build分开,这样可以最大限度的利用缓存,提升构建速度。如果package.json、package-lock.json pnpm-lock.yaml这三个文件没有变化,那么pnpm install 这一步就可以直接使用缓存。
- 为什么要删除src、node_modules?其实在生产环境下,我们只会使用到.next目录,所以我们需要删除一些体积较大的文件,比如src、node_modules。
- 为什么又要使用
pnpm install --only=production
, 因为只安装生产环境依赖,可以进一步减少构建的体积。
构建并启动容器
- 构建镜像:
docker build -t next-app:1.0 .
- 启动容器:
docker run \
-d \
--name my-next-app \
-u root \
-p 3000:3000 \
--restart=always \
next-app:1.0 - 查看日志:
docker logs -f my-next-app
- 查看容器:
docker ps