Skip to content

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