Docker 使用
安装
- 个人电脑安装
- 直接去官网下载docker的桌面端
- 下载好后在设置中配置Docker Engine
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": ["https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub.rat.dev"]
}-
linux服务器安装
Ubuntu 24.x服务器以及用户为ubuntu来举例
# 下载 script 脚本
curl -fsSL https://get.docker.com -o install-docker.sh
# 编辑脚本内容
cat install-docker.sh
# 在末尾加上--dry-run来运行脚本,并编辑执行步骤
sh install-docker.sh --dry-run
# 使用root权限执行脚本,或使用sudo执行
sudo sh install-docker.sh一般只需执行第一步和最后一步即可安装
修改docker加速镜像站
sudo vim /etc/docker/daemon.json{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}
// 上面的镜像站不一定有用,大多数镜像网站都已经关停
{
"registry-mirrors": [
"https://docker.lms.run"
]
}# 重启docker服务
sudo service docker restart- 2026年仍然能使用的镜像站

Dockerfile编写
ARG NODE_VERSION=24.13.0-slim
# ============================================
# Stage 1: 安装依赖(需要完整 monorepo 结构)
# ============================================
FROM node:${NODE_VERSION} AS dependencies
WORKDIR /app
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc* ./
COPY apps/docs/package.json ./apps/docs/
# 如果 docs 依赖其他 workspace,也要复制它们的 package.json
# COPY packages/ui/package.json ./packages/ui/
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
corepack enable pnpm && \
pnpm install --frozen-lockfile
# ============================================
# Stage 2: 构建(在完整 monorepo 里构建)
# ============================================
FROM node:${NODE_VERSION} AS builder
WORKDIR /app
COPY --from=dependencies /app/node_modules ./node_modules
COPY . .
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# 在 docs 目录下执行构建
WORKDIR /app/apps/docs
RUN corepack enable pnpm && pnpm build
# ============================================
# Stage 3: 运行(只保留 standalone 产物,路径是 /app)
# ============================================
FROM node:${NODE_VERSION} AS runner
# 工作目录直接是 /app,不会有 apps/docs 子目录
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
# 关键:把 standalone 产物复制到 /app 根目录
# 复制后,/app 下直接就有 server.js,而不是 /app/apps/docs/server.js
COPY --from=builder --chown=node:node /app/apps/docs/.next/standalone/ ./
# 补充复制静态资源到正确位置
RUN mkdir -p .next && chown node:node .next
COPY --from=builder --chown=node:node /app/apps/docs/.next/static ./.next/static
COPY --from=builder --chown=node:node /app/apps/docs/public ./public
USER node
EXPOSE 3000
CMD ["node", "apps/docs/server.js"]注意:
- 这里的
Dockerfile里有两个FROM指令,第一个FROM指令是node:${NODE_VERSION},第二个FROM指令是node:${NODE_VERSION},这两个指令的作用是为了构建不同阶段的镜像,第一个阶段是安装依赖,第二个阶段是构建。 - 第二个阶段的
WORKDIR指令是/app,而不是/app/apps/docs,因为我们只需要把 standalone 产物复制到/app根目录,不需要把apps/docs目录也复制过来。 - 第二个阶段的
COPY指令把apps/docs/.next/standalone/目录复制到/app根目录,而不是把apps/docs目录也复制过来。 - 第二个阶段的
USER指令是node,而不是root,因为我们不需要以root用户运行容器。 - 第二个阶段的
CMD指令是["node", "apps/docs/server.js"],而不是["node", "server.js"],因为我们只需要把 standalone 产物复制到/app根目录,不需要把apps/docs目录也复制过来,所以server.js就在/app根目录。