当前位置: 首页 > article >正文

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程


目录

  1. Web 项目 Docker 化部署概述
  2. Dockerfile 详解
    • 构建阶段
    • 生产阶段
  3. 构建和运行 Docker 镜像

1. Web 项目 Docker 化部署概述

Docker 化部署的主要步骤分为以下几个阶段:

  1. 构建阶段(Build Stage):

    • 使用 Node.js 镜像或其他构建环境来安装依赖并构建前端项目。
    • 安装依赖、执行构建命令,生成生产环境的静态文件。
  2. 生产阶段(Production Stage):

    • 使用 Nginx 或其他 Web 服务器镜像,将构建后的静态文件部署到服务器,并通过反向代理提供服务。

在整个流程中,Dockerfile 是至关重要的文件,它定义了如何构建镜像以及如何将应用部署到容器中。


2. Dockerfile 详解

2.1 构建阶段(Build Stage)

在构建阶段,我们使用一个 Node.js 镜像来安装依赖、编译和构建前端项目。常见的构建工具有 npm、pnpm 或 yarn,这里以 pnpm 为例。

以下是构建阶段的详细 Dockerfile 配置:

# 使用 Node.js 镜像作为构建阶段的基础镜像
FROM node:20-alpine as build-stage# 设置工作目录
WORKDIR /app# 启用 corepack,并准备 pnpm 作为包管理工具
RUN corepack enable
RUN corepack prepare pnpm@latest --activate# 设置 npm 镜像源为国内镜像源,避免依赖下载慢
RUN npm config set registry https://registry.npmmirror.com# 复制 npm 配置文件、package.json 和 pnpm-lock.yaml
COPY .npmrc package.json pnpm-lock.yaml ./# 安装项目依赖,使用 frozen-lockfile 确保依赖一致
RUN pnpm install --frozen-lockfile# 复制项目的所有源文件到容器中
COPY . .# 执行构建命令,生成生产环境的静态文件
RUN pnpm build
关键步骤解析:
  • FROM node:20-alpine as build-stage:选择基于 Alpine 的 Node.js 镜像,轻量且包含必要的构建环境。
  • WORKDIR /app:设置工作目录为 /app,后续的所有命令将在此目录下执行。
  • RUN corepack enable:启用 corepack,这是一个包管理工具,用于支持 pnpm、yarn 等。
  • COPY .npmrc package.json pnpm-lock.yaml ./:复制项目的依赖配置文件(如 .npmrcpackage.jsonpnpm-lock.yaml)。
  • RUN pnpm install --frozen-lockfile:安装依赖,--frozen-lockfile 选项确保依赖锁文件不被修改。
  • RUN pnpm build:执行构建命令,生成静态资源。

2.2 生产阶段(Production Stage)

在生产阶段,我们使用 Nginx 镜像来提供静态文件服务。将构建阶段生成的静态文件拷贝到 Nginx 的服务目录,并启动 Nginx 服务。

以下是生产阶段的 Dockerfile 配置:

# 使用 Nginx 镜像作为生产阶段的基础镜像
FROM nginx:stable-alpine as production-stage# 将构建阶段生成的静态文件复制到 Nginx 默认的服务目录
COPY --from=build-stage /app/dist /usr/share/nginx/html# 设置监听端口为 80
EXPOSE 80# 启动 Nginx 服务
CMD ["nginx", "-g", "daemon off;"]
关键步骤解析:
  • FROM nginx:stable-alpine as production-stage:使用 Nginx 镜像作为生产阶段的基础镜像,选择稳定版 Alpine 版本。
  • COPY --from=build-stage /app/dist /usr/share/nginx/html:将构建阶段生成的静态文件从 build-stage 中复制到 Nginx 服务目录(/usr/share/nginx/html),这是 Nginx 默认的 Web 目录。
  • EXPOSE 80:暴露端口 80,供外部访问。
  • CMD ["nginx", "-g", "daemon off;"]:启动 Nginx 服务,-g daemon off; 让 Nginx 在前台运行,避免容器退出。

3. 构建和运行 Docker 镜像

3.1 构建 Docker 镜像

使用 docker build 命令根据 Dockerfile 构建镜像:

docker build -t my-web-app:latest .
  • -t my-web-app:latest:给镜像打上标签 my-web-app:latest
  • .:表示 Dockerfile 位于当前目录。

3.2 运行 Docker 容器

构建完成后,使用 docker run 启动容器:

docker run -d -p 8080:80 --name web-container my-web-app:latest
  • -d:后台运行容器。
  • -p 8080:80:将容器的 80 端口映射到本地的 8080 端口。
  • --name web-container:给容器指定名称 web-container
  • my-web-app:latest:使用刚刚构建的镜像启动容器。
补充一个更方便的本地验证命令(临时跑一下)

如果你只是想快速测,不想起名字、也不想后台跑,可以直接:

docker run --rm -p 8080:80 my-vue-app:latest
  • --rm:容器退出后自动删除
  • -d:直接前台打印 nginx 日志

更适合本地测试开发。

3.3 访问应用

成功启动容器后,访问以下 URL 即可看到你的应用:

http://localhost:8080

4.根据不同环境区分 Dockerfile 中的配置

4.1 使用 ARGENV 传递环境变量

在 Dockerfile 中,ARG 用于定义构建时参数,ENV 用于定义容器内的环境变量。通过这两者,可以在构建时传递不同的环境变量,来区分不同的配置。

示例:
ile复制编辑# 定义构建时参数
ARG NODE_ENV=production
# 将构建时参数传递给容器环境变量
ENV NODE_ENV=${NODE_ENV}

在构建镜像时,通过 --build-arg 来传递不同的环境:

bash复制编辑# 构建生产环境镜像
docker build --build-arg NODE_ENV=production -t my-web-app:prod .# 构建开发环境镜像
docker build --build-arg NODE_ENV=development -t my-web-app:dev .

在 Dockerfile 中使用 NODE_ENV 来选择不同的构建配置(如不同的静态文件或配置文件)。

4.2 根据不同的环境选择不同的配置文件

可以在 Dockerfile 中根据环境变量选择不同的配置文件。例如,使用 NODE_ENV 来决定是使用开发环境配置文件还是生产环境配置文件。

dockerfile复制编辑# 根据 NODE_ENV 选择不同的配置文件
COPY ./nginx/${NODE_ENV}.conf /etc/nginx/nginx.conf

在项目中准备不同的配置文件,如 nginx/production.confnginx/development.conf,然后根据 NODE_ENV 的值来选择使用哪个配置文件。

4.3 使用 .env 文件管理不同的环境变量

可以为不同环境准备不同的 .env 文件,然后在运行容器时加载对应的 .env 文件:

  1. 创建不同的 .env 文件:.env.production.env.development、.env.staging。
  2. docker-composedocker run 命令中使用 --env-file 来加载相应的 .env 文件:
docker run --env-file .env.production my-web-app:prod

这样可以根据不同的 .env 文件来配置不同的环境变量

注:也可以在build阶段直接写环境,例如:(根据项目中 package.json 中命令决定)

RUN pnpm build:staging

5. 总结

本文详细介绍了如何将 Web 项目 Docker 化部署,整个流程包括:

  1. 使用 Node.js 镜像进行构建,安装依赖并生成生产环境的静态文件。
  2. 使用 Nginx 镜像提供静态文件服务。
  3. 通过 Docker 构建镜像和启动容器,最终访问部署好的应用。

相关文章:

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...