使用Docker部署Angular项目时,阿里云建议选择什么基础镜像?

在阿里云官方文档和最佳实践中,部署 Angular 项目时并未强制指定唯一的基础镜像,但通常会推荐以下两种场景对应的镜像选择:

✅ 推荐方案(生产环境)

FROM node:20-alpine AS build-stage
# 构建阶段:使用轻量级 Node.js Alpine 镜像进行 npm install 和 ng build
FROM nginx:alpine AS production-stage
# 运行阶段:使用 Nginx Alpine 镜像托管构建后的静态文件

为什么这样选?

  • node:XX-alpine:体积小巧(约 100MB)、启动快、安全性高,适合构建阶段。
  • nginx:alpine:专为托管静态资源优化,支持 gzip、缓存、HTTPS 等,是 Angular 构建产物(dist/ 目录)的标准运行时镜像。
  • 阿里云容器服务 ACK、Serverless 容器等平台上,Alpine 系列镜像因资源占用低而被广泛推荐。

📌 阿里云相关指引参考

根据 阿里云官方 Docker 最佳实践 和 Node.js 应用部署指南,建议:

  • 多阶段构建(Multi-stage Build),分离“构建”与“运行”;
  • 优先选用 alpine 变体减少攻击面;
  • 避免直接使用完整版 node:20nginx(非 alpine)作为最终镜像,除非有特定依赖需求。

🔧 示例 Dockerfile(符合阿里云推荐)

# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build --prod

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist/<your-project-name> /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

💡 提示:若项目需 SSR(服务端渲染),则应使用 node:alpine 作为最终镜像并配合 Express/NestJS,而非纯 Nginx。

需要我提供完整的 nginx.conf 配置或 CI/CD 集成示例吗?