【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…...
AI助盲新体验:CYBER-VISION零号协议快速上手与效果展示
AI助盲新体验:CYBER-VISION零号协议快速上手与效果展示 1. 引言:当科技成为视障者的"第二双眼" 想象一下,当你走在繁忙的街道上,眼前的世界突然变得模糊不清——路边的台阶、迎面而来的行人、突然出现的障碍物都成了潜…...
工业组态软件Intouch(单机版)基础功能实战指南
1. Intouch单机版基础认知与安装准备 第一次接触工业组态软件的朋友,可以把Intouch理解成工业界的"翻译官设计师"。它负责把PLC设备里那些冰冷的数字信号,转换成操作工能看懂的动画界面。我十年前刚入行时,最头疼的就是看不懂设备状…...
我做了一个精简版 Claude Code,朋友说“你咋这么卷”
大家好,我是拭心。你有没有好奇过 Claude Code 是怎么工作的?输入一个需求,它就自己写代码、跑命令,整个过程就像有个程序员在终端里安静地帮你干活。最近 Claude Code 源码泄露,让我们发现,它的核心机制原…...
暗黑3自动化工具终极指南:如何用智能技能宏提升游戏效率
暗黑3自动化工具终极指南:如何用智能技能宏提升游戏效率 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为暗黑破坏神…...
紧急预警:GCC 14.2默认禁用C++27新异常策略,3行代码立即启用并规避ABI断裂风险
第一章:GCC 14.2异常策略变更的底层动因与影响全景GCC 14.2 引入了对 C 异常处理机制的实质性策略调整,核心动因在于缓解长期存在的二进制兼容性风险与运行时开销矛盾。传统 DWARF-based 零成本异常(zero-cost exception)在跨编译…...
学Simulink——基于Simulink的固定频率滞环电流控制Boost变换器
目录 手把手教你学Simulink——基于Simulink的固定频率滞环电流控制Boost变换器 摘要 一、背景与挑战 1.1 Boost变换器电流控制的痛点与传统方法局限 1.1.1 应用场景与核心指标 1.1.2 传统控制的缺陷 1.2 固定频率滞环电流控制的核心优势 1.3 设计目标 …...
500元预算搞定无人机高清图传?手把手教你用OpenIPC+SSC338Q+IMX415攒一套(附硬件清单与避坑指南)
500元预算打造无人机高清图传:OpenIPCSSC338QIMX415实战手册 当大多数无人机爱好者还在为动辄上千元的专业图传设备犹豫时,一群极客已经用开源方案将成本压缩到惊人的500元区间。这不仅是预算的胜利,更代表着硬件DIY文化的精髓——用智慧填补…...
低延迟内存池配置终极 checklist:12项参数+8个LLVM-Clang编译约束+3类NUMA绑定策略
第一章:金融级低延迟内存池的核心设计哲学在高频交易、实时风控与毫秒级行情分发等金融核心场景中,内存分配延迟的微小波动(如纳秒级抖动)可能直接导致订单执行偏差或监管合规风险。因此,金融级低延迟内存池并非单纯追…...
Xinference-v1.17.1模型注册全流程:从HuggingFace下载到本地路径映射
Xinference-v1.17.1模型注册全流程:从HuggingFace下载到本地路径映射 重要提示:本文介绍的是Xinference-v1.17.1版本的模型注册功能,通过简单的配置即可将HuggingFace上的模型下载到本地并建立路径映射,实现快速部署和使用。 1. 什…...
从“存查”到“懂用”:基于 SKC 的企业知识闭环实战
文章目录一、引言: 从“存查”到“懂用”的破局之路二、核心理念:从“知识仓库”到“能力转化引擎”三、实操指南:三步构建知识闭环四、场景演示:新员工入职的“加速跑”五、结语:激活知识价值,打造企业成长…...
