Docker学习(4):部署web项目
一、部署vue项目
在home目录下创建项目目录

将打包好的vue项目放入该目录下,dist是打包好的vue项目

在项目目录下,编辑default.conf

内容如下:
server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html =404;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
该配置文件定义了首页的指向为 /usr/share/nginx/html/index.html, 所以我们可以一会把构建出来的index.html文件和相关的静态资源放到/usr/share/nginx/html目录下。
在项目文件夹下编写Dockerfile文件
![]()
内容如下:
FROM nginxMAINTAINER zouzouRUN rm /etc/nginx/conf.d/default.confADD default.conf /etc/nginx/conf.d/COPY dist/ /usr/share/nginx/html/
- FROM nginx:该镜像是基于nginx:latest镜像构建的
- MAINTAINER zouzou:添加说明
- RUN rm /etc/nginx/conf.d/default.conf:删除目录下的default.conf文件
- ADD default.conf /etc/nginx/conf.d/:将default.conf复制到/etc/nginx/conf.d/下,用本地的default.conf配置来替换nginx镜像里的默认配置
- COPY dist/ /usr/share/nginx/html/:将项目根目录下dist文件夹(构建之后才会生成)下的所有文件复制到镜像/usr/share/nginx/html/目录下
三个文件保持在同一目录

构建docker镜像, -t 表示镜像的名字
docker build -t offices-vue . # 最后的点不要丢了

查看创建的镜像

启动容器
docker run -d -p 5173:80 --name vue-test offices-vue
-
docker run:基于镜像启动一个容器
-
-d:后台方式启动
-
-p 5173:80: 端口映射,将宿主机的5173端口映射到容器的80端口
-
--name:容器名,我的叫vue-test
-
offices-vue:要启动的镜像名称
在浏览器输入宿主的IP地址:5173,即可访问部署的vue项目。

二、部署springboot项目
在home下创建项目目录:
![]()
将打包的项目放入该目录中

在该目录下创建编写Dockerfile文件
# Docker image for springboot file run
# 基础镜像使用java
FROM openjdk:22
# 作者
MAINTAINER ywz
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为xx.jar
ADD myOffices-demo.jar test.jar
# 运行jar包
RUN bash -c 'touch /test.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]
要将这两个文件放在同一个目录

根据该目录创建镜像,因为需要下载jdk22所以需要一些时间。
docker build . -t test-demo

查看创建好的镜像

启动容器8087
# -d参数是让容器后台运行
# 8087为部署后实际代理端口,8089为程序的端口
docker run -d -p 8087:8087 --name test-demo test-demo

在浏览器访问springboot项目

查询动态日志
docker logs -f --tail=100 test-demo

相关文章:
Docker学习(4):部署web项目
一、部署vue项目 在home目录下创建项目目录 将打包好的vue项目放入该目录下,dist是打包好的vue项目 在项目目录下,编辑default.conf 内容如下: server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {r…...
驱动开发中引入私有数据的原因
系列文章目录 驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 系列文章目录驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 驱动开发中引入私有数据(Private Data)概念主要是为了解决以下几个关键问题: 1.多设备支…...
删除edge浏览器文本框储存记录值以及关闭自动填充
当我们点击输入框时总会出现许多以前输入过的信息。 一、删除edge浏览器文本框储存记录值 1、首先按下↓键选中你想删除的信息 二、关闭自动填充。 1、在地址栏输入edge://wallet/settings跳转到以下界面 2、往下滑找到 全部取消即可...
mysql事务 事务并发问题 隔离级别 以及原理
mysql事务 简介:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务四大特性 原子性(Atomici…...
Android 性能为王时代SparseArray和HashMap一争高下
文章目录 一、SparseArray 源码分析1. **类定义和构造函数**2. **基本方法**2.1 put(int key, E value)2.2 get(int key)2.3 delete(int key)2.4 removeAt(int index)2.5 gc()2.6 size()2.7 keyAt(int index) 和 valueAt(int index) 3. **辅助方法**3.1 binarySearch() 二、使用…...
学术图表的基本配色方法
不论是商业图表还是专业图表,图表的配色都极其关键。图表配色主要有彩色和黑白两种配色方案。刘万祥老师曾提出: “在我看来,普通图表与专业图表的差别,很大程度就体现在颜色运用上。” 对于科学图表,大部分国内的期…...
【学习笔记】Webpack5(Ⅱ)
Webpack 3、高级篇 3.1、提升开发体验 —— SourceMap 3.2、提升打包速度 3.2.1 HotModuleReplacement 3.2.2 OneOf 3.2.3 Include / Exclude 3.2.4 Cache 3.2.5 Thread 3.3、减少代码体积 …...
oracle碎片整理
1、move碎片整理 1) DECLARE tmp_val VARCHAR2 (500); BEGIN FOR REC IN (SELECT TABLE_NAME FROM USER_TABLES ) LOOP tmp_val:=ALTER TABLE || REC.TABLE_NAME || MOVE; BEGIN EXECUTE IMMEDIATE tmp_val; DBMS_OUTPUT.ENABLE(buffer_size => null); DBMS_OUTPUT.put_l…...
民国漫画杂志《时代漫画》第15期.PDF
时代漫画15.PDF: https://url03.ctfile.com/f/1779803-1247458444-8befd8?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!...
Alamofire常见GET/POST等请求方式的使用,响应直接为json
Alamofire 官方仓库地址:https://github.com/Alamofire/Alamofire xcode中安装和使用:swift网络库Alamofire的安装及简单使用,苹果开发必备-CSDN博客 Alamofire是一个基于Swift语言开发的优秀网络请求库。它封装了底层的网络请求工作&…...
三分钟一条AI小和尚视频 ,日引300+创业粉。单日变现四位数 全套工具
经过六个月的不懈努力和无数次的尝试错误,我终于找到了一个高效引流和积累粉丝的新策略,并愿意与大家无私分享。这一次,我将详尽地介绍这个方法,建议朋友们多次观看以彻底掌握其精髓。 简而言之,该策略主要依托于AI绘…...
vue3中表格中通过判断某个字段来设置对应按钮和消息提示的disabled展示
vue3中表格中通过判断某个字段来设置对应按钮和消息提示的disabled展示 一、前言1.代码案例2.效果展示 一、前言 当使用 Vue 3 和 Element UI 的 el-table 组件时,你可以通过判断字段的值来设置对应的 el-button 的 disabled 属性和消息提示。下面是一个简单的示例…...
产品经理-交互说明撰写(八)
1. 交互说明 交互说明可以看做是交互设计师或者产品经理输出的最核心的”产品“交互说明面向的”用户“是下游的同事 ⇒ UI设计师、开发工程师、测试工程师 2. 基本交互形式 2.1 页面交互 2.2 元素控件交互 3. 交互说明主要包括以下3个维度 3.1 页面流程(页面之…...
Rust:struct 与字节序列的相互转换
在 Rust 中,将结构体(struct)与字节序列(Vec<u8>)相互转换的常见方法是使用序列化和反序列化库。Rust 有一个流行的序列化库叫做 serde,它支持多种数据格式。为了将结构体转换为字节序列,…...
在https的系统中挂载其他http系统的画面的解决方案
目录 1.问题及说明 2.解决方案及示例 3.总结 1.问题及说明 A系统使用了https,在A系统中挂载B系统的http的画面,会报错如下: Mixed Content: The page at https://beef.zz.com/front/#/biz/cultivationList/cultivationDetails/5dbf836751…...
mysql存储比特位
一、介绍 二、SQL CREATE TABLE bits_table (id INT PRIMARY KEY AUTO_INCREMENT,bit_value BIGINT UNSIGNED );-- 插入一个 8 位的 BIT 值 INSERT INTO bits_table (bit_value) VALUES (B10101010);-- 查询并格式化输出 SELECT id,bit_value,CONCAT(b, LPAD(BIN(bit_value),…...
Lua中table.sort()使用方式
table.sort(tab,compare) 参数如下: tab:表名 compare:比较规则函数名 简略写法: a {1,2,3} table.sort(a,function(a,b) return a>b end) compare这个参数是一个函数,它有两个参数,你可以理解为表中的两个不同元素&…...
数组与指针声明小问题
1、int *p &a; 是 C 语言中的一条语句,它涉及指针的声明和初始化。让我们逐步解释这一行代码的含义: int *p:这是一个指针声明。它声明了一个名为 p 的变量,该变量是一个指向 int 类型数据的指针。 &a:这是取…...
【Java】手把手学会数组的使用
数组的基本用法 创建数组 基本语法: // 动态初始化 数据类型 [] 数组名称 new 数据类型 [] { 初始化数据 }; // 静态初始化 数据类型 [] 数组名称 { 初始化数据 }; 代码示例: int[] array1 {1,2,3,4,5};int[] array2 new int[]…...
音视频开发9 FFmpeg 解复用框架--如何将一个影音文件(mp4文件/wav文件) 最终播放起来
一,播放器框架 二 常用音视频术语 容器/文件(Conainer/File): 即特定格式的多媒体文件, 比如mp4、flv、mkv等。 媒体流(Stream): 表示时间轴上的一段连续数据࿰…...
AI驱动的高能物理探测器协同优化设计与实践
1. 高能物理探测器设计的范式转变在大型强子对撞机(LHC)时代,探测器设计面临前所未有的挑战。以CMS实验为例,其硅像素跟踪器的材料预算曾引发激烈讨论——虽然40-60%的光子转换概率有助于希格斯玻色子双光子衰变通道的识别&#x…...
DeepSeek技术搜索RAG Pipeline重构实录:从模糊匹配到精准意图识别的6次AB测试数据全公开
更多请点击: https://kaifayun.com 第一章:DeepSeek技术搜索RAG Pipeline重构实录:从模糊匹配到精准意图识别的6次AB测试数据全公开 在DeepSeek内部技术文档搜索系统升级中,我们对原有RAG Pipeline进行了深度重构,核心…...
加拿大AI治理实战:风险分级、监管沙盒与可信AI工程化落地
1. 项目概述:这不是一场技术秀,而是一场制度设计的实战演练“Canada’s AI Ambitions: Navigating the Future of AI Governance”——这个标题里没有一行代码,不提一个模型参数,却直指当前全球AI发展最棘手、最易被忽视的底层命题…...
昇腾CANN manifest:仓库清单与版本管理实战
55 个独立仓库,每个仓库独立迭代——CANN 8.0 里的 ops-transformer 是哪个 commit?hccl 是 v2.1.3 还是 v2.2.0?runtime 和 driver 的版本是否兼容?manifest 仓库用一份 XML 格式的清单文件回答了所有这些问题。它是 CANN 发行版…...
RMSNorm:LLM 里的归一化为什么换成了这个
本文基于昇腾CANN和昇腾NPU,围绕 ops-transformer 仓库的相关技术展开。 LayerNorm 在大模型里被 RMSNorm 替换了。LayerNorm 做了减均值再除方差,RMSNorm 只除均方根——去掉了减均值那一步。少一次 Reduce 操作,在量产推理里省掉 15-20% 的…...
Qt 5.9.1 MinGW 32位下,手把手搞定周立功CAN二次开发库的加载与配置
Qt 5.9.1 MinGW 32位环境下周立功CAN二次开发库的实战配置指南 在嵌入式开发领域,CAN总线通信一直是工业控制和汽车电子系统中的核心技术。对于使用Qt框架进行CAN通信开发的工程师来说,如何正确配置硬件厂商提供的二次开发库往往是项目起步阶段的第一道门…...
30个专业模板轻松美化Power BI报表:零基础也能打造惊艳数据可视化
30个专业模板轻松美化Power BI报表:零基础也能打造惊艳数据可视化 【免费下载链接】PowerBI-ThemeTemplates Snippets for assembling Power BI Themes 项目地址: https://gitcode.com/gh_mirrors/po/PowerBI-ThemeTemplates 还在为Power BI报表设计发愁吗&a…...
数据结构太难了?用画图的方式理解链表和栈和树和图
别怕,把它们画出来,你会发现数据结构就是一堆积木。👋 你好,我是 Evan,一名计算机专业的学长,也是《大一突围》专栏的作者。还记得大一第一次见到“链表”时,我被指针绕晕了。后来我试着一个节点…...
从电影运镜到游戏镜头:手把手教你用Cinemachine实现高级镜头语言(含Dutch Angle等实战配置)
从电影运镜到游戏镜头:手把手教你用Cinemachine实现高级镜头语言(含Dutch Angle等实战配置) 在游戏开发中,镜头语言是叙事和情感表达的重要工具。就像电影导演通过精心设计的镜头来引导观众情绪一样,游戏开发者也可以…...
DeepSeek / Qwen 大模型在昇腾上的推理优化实战
前言 把DeepSeek-V3和Qwen2.5-72B部署到昇腾910B集群上。客户说"GPU上跑得好好的,换昇腾应该也行吧"。结果第一天就被砸懵——同样的模型、同样的batch,昇腾上吞吐只有GPU的60%。不是算力不够,是我根本没搞清楚CANN的优化逻辑和CUD…...
