使用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、构建并运行

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434991.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微服务即时通讯系统】——brpc远程过程调用、百度开源的RPC框架、brpc的介绍、brpc的安装、brpc使用和功能测试

文章目录 brpc1. brpc的介绍1.1 rpc的介绍1.2 rpc的原理1.3 grpc和brpc 2. brpc的安装3. brpc使用3.1 brpc接口介绍 4. brpc使用测试4.1 brpc同步和异步调用 brpc 1. brpc的介绍 1.1 rpc的介绍 RPC(Remote Procedure Call)远程过程调用,是一…

X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版 前言准备安装基础软件1.安装Docker19.03安装Nvidia驱动安装配置Nvidia container toolkit 下载Apollo源码(笔者下载的是releases下9.0.0版本,大家可以参考)编译Apollo9.0下载资源包…

如何使用GitHub Desktop管理GitLab库

不管是新手还是老手,Github Desktop都是在苹果系统和Windows系统上管理与创建项目的不错的方式,GitHub Desktop都能够让在GitHub上的工作流更为简单快捷。 注意,以下步骤只支持原版的GitHub Desktop 第一步 从这下载GitHub Desktop打开你的G…

【hot100-java】【柱状图中最大的矩形】

R9-栈篇 面积最大矩形的高度一定是 heights 中的元素 简单解释,就是说,最大高度必然是heights中的一个元素,我们假设是h,然后我们基于h,左右拓展,尽量拓展到h越来越高(符合单调栈)&a…

手机改IP地址怎么弄?全面解析与操作指南

在当今数字化时代,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。有时候,出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。然而,对于大多数普通用户来说,如何操作可能还是…

Redis 篇-深入了解 Redis 中的 RESP 通信协议与内存回收(过期 key 处理、内存淘汰策略)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 通信协议 - RESP 协议 2.0 Redis 内存回收 2.1 Redis 内存回收 - 过期 key 处理 2.1.1 Redis 是如何知道一个 Key 是否过期呢? 2.1.2 是不是 TT…

Linux基础(三):安装CentOS7(系统安装+桥接联网+换源)

1.分区设置 由于使用 GPT 的关系, 因此根本无须考虑主/延伸/逻辑分区的差异。CentOS 默认使用 LVM 的方式来管理你的文件系统。使用GPT进行分区: 开机管理程序( boot loader) 使用CentOS 7.x默认的grub2软件。 2.各种分区格式 …

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…

Oracle 配置恢复目录catalog

一.介绍 Oracle中使用RMAN备份的数据我们分为两类 RMAN知识库数据库的数据块 Oracle默认把 RMAN知识库 放在目标数据库的控制文件中,在以后进行恢复的时候 我们要先读知识库的信息然后才能恢复。 但这样就产生了一个问题,知识库放在了控制文件上&#xf…

【C++】set与map

目录 一、预备知识: 1、关联式容器: 2、键值对: 3、树形结构的关联式容器: 二、set: 1、set的介绍: 2、使用: 1、set的构造: 2、set的各种功能: 3、multiset 三…

AOP-代理实现

三种代理实现 1 JDK动态代理实现-基于接口代理 2 CGLIB动态代理实现-基于类代理 3 AspectJ 适配实现 为什么Proxy.newProxyInstance 会生成新的字节码? 创建代理类: Proxy.newProxyInstance 首先会检查缓存中是否有已存在的代理类字节码。 如果没有&…

计算机毕业设计 C语言学习辅导网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

14.安卓逆向-frida基础-编写hook脚本2

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

16. C++ TinyWebServer项目总结(16. 服务器调制、调试和测试)

主要包括: 使用 tcpdump 抓包;使用 gdb 调试器;使用压力测试工具,模拟现实世界中的高并发请求,测试服务器在高压状态下的稳定性。 最大文件描述符数 Linux 对应用进程能打开的最大文件描述符数量有两个层次的限制&a…

node的版本管理工具volta

安装方式 # mac curl https://get.volta.sh | bash # Windows Installation winget install Volta.Volta切换版本 volta install node指定版本根据项目固定node和包管理器版本和 该命令会在package.json生成volta的配置,volta会自动读取项目的该配置来决定node的…

【STM32】TCP/IP通信协议--LWIP内存管理

五、LWIP内存管理 1.什么是内存管理? (1)内存管理,是指软件运行时对计算机内存资源的分配的使用的技术,其主要目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源(就比如C语言当…

安全的价值:构建现代企业的基础

物理安全对于组织来说并不是事后才考虑的问题:它是关键的基础设施。零售商、医疗保健提供商、市政当局、学校和所有其他类型的组织都依赖安全系统来保障其人员和场所的安全。 随着安全技术能力的不断发展,许多组织正在以更广泛的视角看待他们的投资&am…

SQL学习1

24.9.28学习目录 一.数据库1.SQL语句基础2.匹配条件 一.数据库 对于嵌入式的数据库,其使用的是SQLite这种小型数据库; 在ubuntu中的下载方法 //字符界面 sudo apt-get install sqlite3//图形界面 sudo apt-get install sqlitemanSQLite特点&#xff1a…

ACL 2023--MetaAdapt: 通过元学习实现领域自适应的少量样本虚假信息检测

https://github.com/Yueeeeeeee/MetaAdapt 随着社交媒体上出现的新话题(例如COVID-19)成为虚假信息传播的来源,克服原始训练领域(即源领域)与这些目标领域之间的分布变化,仍然是虚假信息检测中的一项复杂任…

5分钟精通Excel在go中的使用

一些简单操作可以在官方文档中找到,应该足够无经验的朋友们入门 介绍 - 《Excelize v2.2 中文文档》 - 书栈网 BookStack 这里贴一个中文版的链接(以excelize库为例,相对其他库来说,体验很不错),不过要注…