云计算百科
云计算领域专业知识百科平台

保姆级教程:Docker 部署 Vue 项目 3 种方案,从入门到生产直接抄作业!

保姆级教程:Docker 部署 Vue 项目 3 种方案,从入门到生产直接抄作业!

大家好,我是霸哥。

平时很多粉丝问我:Vue 项目打包完一堆 dist 目录,到底怎么用 Docker 跑起来?直接扔容器里?用 Nginx 还是 Node?多阶段构建又是啥?

今天这篇,一次性把开发、测试、生产三种场景的 Docker 部署方案讲透,代码直接复制就能用,再也不用到处搜零散教程。


一、先搞懂:Vue 部署到底在干嘛?

说白了,Vue 打包后就是纯静态文件:html、css、js、图片。它不像 SpringBoot 自带服务器,必须靠Web 服务器来托管。

所以 Docker 部署 Vue,本质就两件事:

  • 把 dist 目录放进容器
  • 用 Nginx 对外提供访问
  • 方案不同,只是打包环境和运行环境的区别。


    二、方案一:最简单粗暴 —— 本地打包 + Docker 运行

    适合:本地已经 npm run build 好 dist,只想快速跑起来。

    1. 项目结构

    plaintext

    vue-project/
    ├── dist/ # 本地已打包好
    ├── Dockerfile
    └── nginx.conf

    2. Dockerfile

    dockerfile

    # 直接使用 nginx 镜像
    FROM nginx:stable-alpine

    # 拷贝本地 dist 到 nginx 静态目录
    COPY dist/ /usr/share/nginx/html/

    # 拷贝自定义 nginx 配置
    COPY nginx.conf /etc/nginx/conf.d/default.conf

    # 暴露 80 端口
    EXPOSE 80

    3. nginx.conf 解决刷新 404

    nginx

    server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html;

    # 解决 Vue Router history 模式 404
    location / {
    try_files $uri $uri/ /index.html;
    }
    }

    4. 构建运行

    bash

    运行

    # 构建镜像
    docker build -t vue-simple .

    # 启动容器
    docker run -d -p 8080:80 –name vue-app vue-simple

    优点:简单、快缺点:必须本地打包,换台机器就要重新打包


    三、方案二:标准生产方案 —— Docker 多阶段构建

    企业里最常用!一行命令,从源码到运行,不用本地装 node。

    Dockerfile(多阶段)

    dockerfile

    # 阶段1:构建阶段 —— 只用来打包
    FROM node:16-alpine as builder

    # 设置工作目录
    WORKDIR /app

    # 拷贝 package 文件,利用缓存
    COPY package*.json ./

    # 安装依赖
    RUN npm install –registry=https://registry.npmmirror.com

    # 拷贝所有源码
    COPY . .

    # 打包生产环境
    RUN npm run build

    # ==========================================
    # 阶段2:运行阶段 —— 只保留 dist + nginx,体积极小
    FROM nginx:stable-alpine

    # 从构建阶段拷贝 dist 到 nginx
    COPY –from=builder /app/dist /usr/share/nginx/html/

    COPY nginx.conf /etc/nginx/conf.d/default.conf

    EXPOSE 80

    运行命令

    bash

    运行

    docker build -t vue-prod .
    docker run -d -p 8080:80 vue-prod

    优点:

    • 环境统一,不依赖本地环境
    • 最终镜像极小,安全干净
    • 适合 CI/CD 流水线

    这才是真正生产级用法。


    四、方案三:开发热更方案 —— Docker + 本地开发

    适合:想在 Docker 里开发,改代码自动刷新。

    dockerfile

    FROM node:16-alpine

    WORKDIR /app

    COPY package*.json ./

    RUN npm install

    COPY . .

    # 启动开发服务
    CMD ["npm", "run", "dev"]

    运行时映射端口和目录:

    bash

    运行

    docker run -d -p 3000:3000 -v $(pwd):/app vue-dev

    优点:开发环境统一缺点:不适合线上运行


    五、霸哥踩坑总结(必看!)

  • Vue Router history 模式刷新 404一定要加 nginx 的 try_files $uri $uri/ /index.html;

  • 构建时下载依赖极慢用淘宝镜像:

    plaintext

    npm install –registry=https://registry.npmmirror.com

  • 多阶段构建不要少写 as builder不然第二阶段拷贝不到文件。

  • dist 目录没更新检查 Dockerfile 是否真的重新打包,而不是用旧缓存。

  • 端口映射不对访问不了左边是宿主机端口,右边是容器端口,别搞反。


  • 六、总结

    • 本地快速演示:用方案一(本地打包 + Nginx)
    • 公司生产环境:用方案二(多阶段构建,标准推荐)
    • Docker 开发环境:用方案三

    一套流程下来,Vue 部署再也不是玄学。

    你平时公司里用的是哪种部署方式?Nginx 还是 Caddy?有没有遇到过奇葩线上问题?评论区聊一聊,我来帮你诊断!

    我是霸哥,我们下期继续硬核实战。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 保姆级教程:Docker 部署 Vue 项目 3 种方案,从入门到生产直接抄作业!
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!