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

使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Compose通过简化多容器应用的部署和管理,使得开发人员能够更专注于应用程序的开发和测试。

部署SpringBoot

现在我们有一个springboot项目,需要依赖Redis、mysql5.7、nginx。

如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的Docker compose实现容器编排技术。

1、在服务器上创建工作目录

工作目录是用于存放部署所需要的文件等(Dockerfile、jar包、配置文件、静态资源),我这里是在根目录下创建app文件夹,里面内容如下

 2、打包SpringBoot项目并上传到服务器

注意,在SpringBoot项目中的yml文件中,也需要一些小小的改动,如下:

3、编辑需要的Dockerfile文件

本项目一共需要3个,分别是springboot的、nginx、以及mysql,分别如下

3.1、Dockerfile-springboot

#镜像、容器的基础环境,这里是JDK8
FROM kdvolder/jdk8
MAINTAINER zhangb#设置工作目录
WORKDIR /app# 将jar包复制到容器内,注意在dockerfile中,路径都是相对路径,而不是绝对路径 
COPY /projects/SmartCommunities-0.0.1-SNAPSHOT.jar /app/SmartCommunities-0.0.1-SNAPSHOT.jar # 向外暴露端口  
EXPOSE 8383# 定义容器启动时执行的命令  
ENTRYPOINT ["java","-jar","/app/SmartCommunities-0.0.1-SNAPSHOT.jar"]

3.2、Dockerfile-nginx

# 使用官方Nginx镜像作为基础  
FROM nginx:latest
MAINTAINER zhangb# 复制自定义的Nginx配置文件  
COPY /usr/local/nginx/conf/nginx.conf nginx.conf# 复制你的静态文件或其他资源(如果有的话)  
COPY /usr/local/nginx/html /usr/share/nginx/html

对应的nginx配置文件


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#access_log  logs/access.log  main;sendfile        on;keepalive_timeout  65;server {listen       81;server_name  localhost;charset utf-8;location / {root   html;index  index.html index.htm;}	error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}#项目的静态资源以及后端代理server {listen 80;server_name smartcommunity;location /{root /usr/share/nginx/html;index index.html;}location /prod-api/{proxy_pass http://192.168.235.138:8383/;}}}

nginx所需要的静态资源

存放在app下的html中

3.3、Dockerfile-mysql


MAINTAINER zhangb#/docker-entrypoint-initdb.d/目录下的所有.sh、.sql、.sql.gz文件(取决于具体的数据库镜像)将在数据库初始化时被执行或导入。
#这意味着community-linux.sql中的SQL命令将在数据库容器首次启动时被执行,从而初始化数据库
ADD ./db/communiyu01.sql /docker-entrypoint-initdb.d

4、核心docker-compose.yml文件

注意,yml中的缩进全部都是空格来完成的,如果有tab,会报错

#Docker-compose的版本
version: '3.0'  #编排的服务、容器有哪些
services:  #mysql服务db:#定义容器名称,这里就是之前springboot的yml配置文件中的container_name: db  #所使用的mysql镜像image: mysql:8.0#通过dockerfile-mysql来构建build:context: ./dockerfile: Dockerfile-mysql#解决外部与内部连接的问题command: --default-authentication-plugin=mysql_native_password#数据库的环境environment:#初始化mysql的密码MYSQL_ROOT_PASSWORD: 111111  MYSQL_DATABASE: 'community01'MYSQL_PASSWORD: 111111ports:  - "3306:3306"  #使用的网络,注意,docker中容器的通信需要在同一网络下才能进行通信networks:- communityredis:  image: redis:7.0container_name: redis  ports:  - "6379:6379"  networks:- communityapp:  build:  context: .  dockerfile: Dockerfile-springboot  ports:  - "8383:8383"  depends_on:  - db  networks:- community  nginx:  build:  context: .  dockerfile: Dockerfile-nginx  ports:  - "83:80"  depends_on:  - appnetworks:- community#定义该项目下的容器所使用的网络
networks:  #定义的网络名称community:  #网络类型,桥接模式driver: bridge

同时,关于docker中的容器通信,详看Docker容器间通信详解

5、构建并运行

 

相关文章:

使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Co…...

大话 RCU (read copy update)

还得是看官方文档。kernel/Document/RCU/WhatisRCU.rst. 首先,我们要搞清楚一件事,指针它是一个变量,他在内存上也是占了空间的,然后他里面的值,是你申请的内存块的首地址。文档开篇就讲咱们的基本原理,就…...

vue项目npm run serve 报错,Error: read ECONNRESET at TCP.onStreamRead

背景:vue2的项目,之前npm run serve一直可以正常使用,突然每次启动都会报错了,报错信息如下: node:events:492 throw er; // Unhandled error event ^ Error: read ECONNRESET at TCP.onStreamRead (n…...

十二、MySQL数据类型精讲

文章目录 1. MySQL中的数据类型2. 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4 如何选择? 3. 浮点类型3.1 类型介绍3.2 数据精度说明3.3 精度误差说明 4. 定点数类型4.1 类型介绍4.2 开发中经验 5. 位类型:BI…...

不同参数对分类精度的影响以及思考

1 问题 探索不同的batch_size对分类精度的影响探索不同的损失函数对分类精度的影响 2 方法 问题一 要知道的是Batch_size的作用:决定了下降的方向。在合理范围内,增大Batch_size的好处: 一是提高了内存利用率以及大矩阵乘法的并行化效率&…...

开源AI智能名片小程序源码:私域电商构建独特竞争力的新机遇

摘要:本文旨在探讨私域电商如何利用开源AI智能名片小程序源码构建独特竞争力。在强调独特性是通向成功的必要条件的基础上,分析开源AI智能名片小程序源码在私域电商发展独特性方面的作用及相关策略。 一、引言 在竞争激烈的商业环境中,让自己…...

从Web2到Web3:探索下一代互联网的无限可能性

互联网经历了从Web1到Web2的重大变革,现在正迈向Web3。Web2通过社交媒体、电子商务和内容平台改变了我们的数字生活,但同时也伴随着中心化平台的垄断和用户数据被广泛控制的问题。而Web3的出现,则试图通过去中心化技术解决这些挑战&#xff0…...

POE供电支持画中画的摄像头解决方案

首先他的主芯片由嵌入式操作系统和高性能硬件处理平台,具有较高稳定性和可靠性,有丰富的接口,可以支持二次开发定制的. 首先,什么是poe供电呢?Poe供电是通过网络线(网线)供电的一种技术&#x…...

Python 3 字典

Python 3 字典 引言 Python 字典(Dictionary)是一种非常有用的内置数据类型,用于存储键值对。在 Python 3 中,字典保持了一些基本特性,同时也有一些新的改进和特性。本文将详细介绍 Python 3 中的字典,包括其基本操作、常用方法以及一些高级特性。 字典的基本操作 创…...

CFR( Java 反编译器)

一、安装教程 CFR(Class File Reader)是一个流行的Java反编译器,它可以将编译后的.class文件或整个.jar文件转换回Java源代码。以下是CFR的下载和使用教程: 下载CFR 访问CFR的官方网站或GitHub仓库:CFR的最新版本和所…...

单片机的两种看门狗原理解析——IWDG和WWDG

一、IWDG独立开门狗的主要性能 计时机制: 递减计数器 独立开门狗的初始频率: LSI低速内部时钟:RC震荡器,40kHz 独立开门狗是以LSI为初始频率的,所以独立开门狗的初始时钟频率取决与单片机本身,因此在使…...

SQL进阶技巧:如何获取状态一致的分组? | 最大、最小值法

目录 0 需求描述 1 数据准备 2 问题分析 方法1:最大、最小值法(技巧) 方法2:常规思路 3 小结 如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通…...

windows10使用bat脚本安装前后端环境之msyql5.7安装配置并重置用户密码

首先需要搞清楚msyql在本地是怎么安装配置、然后在根据如下步骤编写bat脚本: 思路 1.下载mysql5.7 zip格式安装包 2.新增data文件夹与my.ini配置文件 3.初始化数据库 4.安装mysql windows服务 5.启动并修改root密码(新增用户初始化授予权限&#xff09…...

文件上传、amrkdown编辑器

一、文件上传 这里我以图片为例,进行上传,上传到阿里云oss(对象存在中) 首先,我们先梳理一下,图片上传的流程 1、前端选择文件,提交文件 前端提交文件,我们可以使用ElementUI中的…...

Linux防火墙-4表5链

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…...

(最新已验证)stm32 + 新版 onenet +dht11+esp8266/01s + mqtt物联网上报温湿度和控制单片机(保姆级教程)

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…...

无环SLAM系统集成后端回环检测模块(loop):SC-A-LOAM以及FAST_LIO_SLAM

最近在研究SLAM目标检测相关知识,看到一篇论文,集成了SC-A-LOAM作为后端回环检测模块,在学习了论文相关内容后决定看一下代码知识,随后将其移植,学习过程中发现我找的论文已经集成了回环检测模块,但是我的另…...

速盾:视频开cdn合适还是视频点播合适?

在选择视频服务时,许多企业和个人面临了一个重要的决策,那就是选择是使用开CDN(内容分发网络)还是使用视频点播服务。这两种选择都有各自的优势和适用场景,因此在做出决定之前,我们需要仔细评估自身的需求和…...

Mac电脑安装FFmpeg和卸载FFmpeg

Mac电脑安装FFmpeg 在Mac上安装FFmpeg有几种方法,以下是通过Homebrew安装的最简单方法: 1. 使用Homebrew安装FFmpeg 如果你已经安装了Homebrew,可以通过以下命令来安装FFmpeg: 打开终端 (Terminal)。更新Homebrew:…...

数据结构:栈 及其应用

逻辑结构: 栈(Stack)是一种遵循后进先出(LIFO, Last In First Out)原则的有序集合 (受限的线性表)。这种数据结构只允许在栈顶进行添加(push)或删除(pop&…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...