1.配置dockerfile
vi Dockerfile
bash
# 安装依赖
FROM node:22-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
# 构建镜像
FROM node-22-alpine AS runner
WORKDIR /app
# 创建非 root 用户 (以用户名 app 为例)
RUN addgroup -S app && adduser -S app -G app
USER app
# 从第一阶段复制依赖 node_modules
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN npm run build
# 生产环境变量
# Next.js 会收集完全匿名的使用数据用于分析。
# 详情请访问:https://nextjs.org/telemetry
# 若要禁用此功能,请取消注释以下行:
# ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_ENV=production
ENV HOSTNAME="0.0.0.0"
EXPOSE 3000
# 启动应用程序
CMD ["npm", "start"]
# 安装依赖
FROM node:22-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
# 构建镜像
FROM node-22-alpine AS runner
WORKDIR /app
# 创建非 root 用户 (以用户名 app 为例)
RUN addgroup -S app && adduser -S app -G app
USER app
# 从第一阶段复制依赖 node_modules
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN npm run build
# 生产环境变量
# Next.js 会收集完全匿名的使用数据用于分析。
# 详情请访问:https://nextjs.org/telemetry
# 若要禁用此功能,请取消注释以下行:
# ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_ENV=production
ENV HOSTNAME="0.0.0.0"
EXPOSE 3000
# 启动应用程序
CMD ["npm", "start"]
1.1配置dockerignore
同时在 Dockerfile 同级目录创建一个 .dockerignore
文件,以从 Docker 构建上下文中排除不必要的文件:
bash
node_modules
Dockerfile
README.md
.dockerignore
.git
.next
.env*
node_modules
Dockerfile
README.md
.dockerignore
.git
.next
.env*
2.使用容器编译node.js
由于没有node.js环境,采用镜像方式进行编译
创建Dockerfile
dockerfile
FROM node:lts-alpine
WORKDIR /app
# 复制 package 文件
COPY package*.json ./
COPY /opt/version.json ./
# 安装依赖
RUN npm install
# 构建项目
COPY . .
RUN npm run build:development
FROM node:lts-alpine
WORKDIR /app
# 复制 package 文件
COPY package*.json ./
COPY /opt/version.json ./
# 安装依赖
RUN npm install
# 构建项目
COPY . .
RUN npm run build:development
分离静态文件
bash
cp /opt/version.json .
docker build -t myplsapp:v1 .
docker create --name extract-stage myplsapp:v1
docker cp extract-stage:/app/dist ./dist
docker rm extract-stage
docker rmi myplsapp:v1
cp /opt/version.json .
docker build -t myplsapp:v1 .
docker create --name extract-stage myplsapp:v1
docker cp extract-stage:/app/dist ./dist
docker rm extract-stage
docker rmi myplsapp:v1