【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库
1、思路
- docker部署项目是将项目的不同程序放入不同容器中运行,这样可以方便管理不同程序。
- 我的项目有Springboot、Vue、mysql三部分,Vue用nginx代理,因为nodejs太占空间了。
- 一开始我是用Dockerfile创建镜像再运行容器的,但发现它是基于别的镜像再创建镜像,比较占空间。
- 用docker-compose直接配置原镜像,用数据卷实现配置文件挂载加载,就能运行容器,不需要额外创建镜像,很快很节约,还没发现弊端。
2、编写docker-compose
- 在总项目(包含Springboot、Vue项目)目录下再创建一个文件夹
app2Docker专门放打包后的项目,在app2Docker里创建docker-compose.yml,内容如下。
version: '3'
services: mysql-container: image: mysql:5.7container_name: mysql-containerenvironment: MYSQL_ROOT_PASSWORD: "root"
# MYSQL_DATABASE:数据库名ports: - "3306:3306"volumes: - mysql-data:/var/lib/mysqlblog_springboot: image: openjdk:8-jdkcontainer_name: blog_springbootports: - "8100:8100"volumes:
# 目标文件夹会自动创建- ./blog_springboot:/app- ./myupload:/app/uploadworking_dir: /appcommand: java -jar simple_blog_backend-0.0.1-SNAPSHOT.jar --spring.config.location=file:./application.propertiesblog_vue_nginx: container_name: blog_vue_nginximage: nginx
# 80http端口转发到8080https端口 ports: - "80:80"- "8080:8080"volumes: - ./blog_vue/dist:/usr/share/nginx/html- ./blog_vue/SSL_test_key/mycert.crt:/etc/nginx/certs/mycert.crt- ./blog_vue/SSL_test_key/mykey.key:/etc/nginx/certs/mykey.key- ./blog_vue/my_nginx.conf:/etc/nginx/conf.d/my_nginx.conf
#调用Dockerfile的写法
# blog_springboot:
# build:
# dockerfile所在文件夹
# context: ./blog_springboot
# dockerfile:Dokerfile 名,默认的话这一项可省略
# container_name: blog_springboot
# ports:
# - "8100:8100"
# volumes:
# 目标文件夹会自动创建
# - ./myupload:/app/upload
#使用容器间网络
networks: default: name: my_network#不会覆盖已有数据卷
volumes: mysql-data:
- 运行
docker-compose.yml
运行前,把打包后的Springboot、Vue项目放入app2Docker里对应的子文夹里

然后把app2Docker文件夹拷贝到docker toolbox虚拟机的/home目录下
cd /home/app2Docker进入目录,执行docker-compose up -d启动多个容器,执行docker-compose down停止并删除多个容器 - 安装docker-compose(补充)
但是docker toolbox虚拟机不自带docker-compose,执行如下命令下载docker-compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋予 Docker Compose 可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
3、代码分析
- 第一段创建
mysql-container容器,设置数据库密码为root,保存数据库数据到数据卷mysql-data; - 第二段创建
blog_springboot容器,加载程序和配置文件到容器内/app,挂载./myupload文件夹来保存java程序上传图片等文件资源,'working_dir: /app’设置后面command命令的容器内工作路径,application.properties是从Springboot工程里拷贝出来修改的,java加--spring.config.location=file:./application.properties参数运行时只加载外部配置文件,在里面我修改了mysql访问地址
spring.datasource.url=jdbc:mysql://mysql-container:3306/simple_blog?serverTimezone=UTC&characterEncoding=utf-8&useSSL=true
mysql-container是容器名,在docker-compose.yml里后面定义了容器间网络my_network,所以能通过容器名加端口号来进行通信。
- 第三段创建
blog_vue_nginx容器,通过数据卷把dist加载到nginx里,同时加载https的自签名证书mycert.crt和mykey.key,生成证书方法看文章链接,最后加载nginx代理的配置文件my_nginx.conf实现http转发到https。
server {listen 80;server_name 192.168.99.100;return 301 https://$host:8080$request_uri;location / {}
}
server {listen 8080 ssl;server_name 192.168.99.100;ssl_certificate /etc/nginx/certs/mycert.crt;ssl_certificate_key /etc/nginx/certs/mykey.key;# 根目录指向 /usr/share/nginx/htmllocation / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html;}
}
4、扩展
-
在docker toolbox虚拟机中操作可启动虚拟机后用Xshell连接:
主机:192.168.99.100(虚拟机的地址)
用户名默认:docker
密码默认:tcuser -
用Xftp传输文件(Xshell连接成功后并且安装了Xftp,点箭头所指就可以建立Xftp连接):

-
docker toolbox里的虚拟机系统/home是临时系统,重启会清空,使用数据卷或在VirtualBox的设置中配置共享文件夹,将主机上的目录共享到虚拟机的/home或其他目录。这样,/home目录就可以作为持久存储。
-
【docker快捷部署系列一】docker快速入门,安装docker
-
运行时日志报错:jar Error: Unable to access jarfile …;
因为挂载了jar程序运行的当前文件夹,可创建子文件夹来挂载。 -
运行时日志报错:java.io.IOException: Problem reading font data.
FROM openjdk:8-jdk-alpine 缺少字体库
改为FROM openjdk:8-jdk
相关文章:
【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库
1、思路 docker部署项目是将项目的不同程序放入不同容器中运行,这样可以方便管理不同程序。我的项目有Springboot、Vue、mysql三部分,Vue用nginx代理,因为nodejs太占空间了。一开始我是用Dockerfile创建镜像再运行容器的,但发现它…...
Java新手指南:从菜鸟到编程大师的趣味之路-类和对象
这里是Themberfue 本章主要介绍的是Java最重要的面向对象(OOP)的基础 面向对象 Java是一门纯面向对象的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用…...
计算机毕业设计选题推荐-房屋租赁系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
LeetCode 3131.找出与数组相加的整数 I:最小值之差(多语言一行版)
【LetMeFly】3131.找出与数组相加的整数 I:最小值之差(多语言一行版) 力扣题目链接:https://leetcode.cn/problems/find-the-integer-added-to-array-i/ 给你两个长度相等的数组 nums1 和 nums2。 数组 nums1 中的每个元素都与…...
Win32注册表操作
注册表的概念 注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。 注册表结构 运行Regedi…...
白骑士的PyCharm教学高级篇 3.3 Web开发支持
系列目录 上一篇:白骑士的PyCharm教学高级篇 3.2 多模块项目管理 在现代Web开发中,前端技术的重要性日益增加。PyCharm不仅在后端开发中表现出色,在前端开发方面也提供了丰富的支持。本文将详细介绍PyCharm中对HTML、CSS、JavaScript的编辑支…...
SpringAOP-底层实现源码解析
目录 1. Spring AOP原理流程图 2. 动态代理 3. ProxyFactory 4. Advice的分类 5. Advisor的理解 6. 创建代理对象的方式 ProxyFactoryBean BeanNameAutoProxyCreator DefaultAdvisorAutoProxyCreator 7. 对Spring AOP的理解 8. AOP中的概念 9. Advice在Spring AOP中…...
【C语言初阶】C语言操作符全攻略:提升编程效率的关键步骤
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言数组 🌹🌹期待您的关注 🌹🌹 ❀操作符 📒1. 算术操作…...
2007-2023年上市公司金融化程度测算数据(含原始数据+计算代码+计算结果)
2007-2023年上市公司金融化程度测算数据(含原始数据计算代码计算结果) 1、时间:2007-2023年 2、指标:行业代码、行业名称、stkcd、year、证券简称、是否发生ST或ST或PT、是否发生暂停上市、股票简称、成立日期、交易性金融资产、…...
【时时三省】(C语言基础)操作符
山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 算术操作符 这个时候打印出来的是整数 不会打印小数点后面的数字 因为它是int类型 只用把他换成浮点型并且它的两个数里面有一个必须是小数 才可以算出来小数 示例: %操作符的两个操作数必…...
常用API(三)
对于常见API的学习,主要学习了关于时间和日期的传统和新增APi 目录 1.Math 2.System 3.Runtime 4.日期和时间 (1)JDK8前传统时间API [1] Date [2] SimpledateFormat [3]Calendar (2)JDK8后新增时间API [1]代替…...
内存管理问题总结
内存管理 虚拟内存 我们程序所使⽤的内存地址叫做虚拟内存地址(Virtual Memory Address) 实际存在硬件⾥⾯的空间地址叫物理内存地址(Physical Memory Address) 操作系统引⼊了虚拟内存,进程持有的虚拟地址会通过 …...
十七、Intellij IDEA2022.1.1下载、安装、激活
目录 🌻🌻 一、下载二、 安装三、激活 一、下载 官网下载地址 本地直接下载 目前Intellij IDEA的最新版本已经更新到了 2024.1.4,由于最新版本可能存在不稳定的问题,此处选择其他版本进行下载,此处以2022.1.1为例进行下…...
【Material-UI】Button Group 中的 Disabled Elevation 功能
文章目录 一、Button Group 组件概述二、什么是 Elevation?三、为什么需要禁用 Elevation?四、使用 disableElevation 属性五、属性解析1. disableElevation 属性2. variant 属性3. aria-label 属性 六、应用场景1. 表单操作2. 工具栏3. 导航按钮 七、样…...
Java RESTful API 测试:使用 RestAssured
Java RESTful API 测试:使用 RestAssured 简介 在现代软件开发中,RESTful API扮演着至关重要的角色。API的测试同样重要以确保它们按预期工作。Java中的RestAssured库提供了一种简单直观的方式来测试RESTful Web服务。本文将介绍RestAssured的基本概念…...
将nestjs项目迁移到阿里云函数
注意:长耗时,高内存 的应用,定时任务 不适合迁移。 根据模板创建项目 一、模板配置修改 1.node版本修改 由于我的nestjs项目是node18的需要修改 pre-deploy项目: 改成 resources:framework:component: fc3actions:pre-deploy:-…...
边缘计算×AI:绘制未来实时智能的宏伟蓝图
引言:时代的召唤 随着物联网技术的飞速发展,数以亿计的传感器和智能设备正不断涌入我们的生活和工作空间,它们生成的数据量级之大,远非传统的集中式云处理所能高效应对。因此,一种新兴的数据处理模式——边缘计算&…...
实现关系运算符的重载
全局函数的实现法: 成员函数实现法:...
【css】使用CSS绘制奥运五环--巴黎奥运
使用CSS绘制奥运五环 在2024年巴黎奥运会期间,本文来使用 CSS 来画一个奥运五环。奥运五环由五个相互交叠的圆环组成,分别代表五大洲。 奥运五环是相互连接的,因此在视觉上会产生重叠效果,这也是实现五环最有挑战性的部分 HTML结…...
【Python数据处理】MatplotlibNumpyPandas常用API整理
目录 Matplotlib 1. 导入 Matplotlib 并创建图布 2. 实现基础绘图 2.1 折线图 2.2 柱状图 2.3 散点图 2.4 直方图 3. 完善绘图辅助功能 3.1 添加标题和标签 3.2 添加网格线 3.3 添加图例 4. 在一个坐标系下绘制多个图像 5. 在一个图形窗口创建多个子图 5.1 使用 a…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
