SpringBoot 整合Docker Compose

Docker Compose是一种流行的技术,可以用来定义和管理你的应用程序所需的多个服务容器。通常在你的应用程序旁边创建一个 compose.yml 文件,它定义和配置服务容器。

使用 Docker Compose 的典型工作流程是运行 docker compose up,用它连接启动的服务来处理你的应用程序,然后在完成后运行 docker compose down。

sring-boot-docker-compose 模块可以包含在项目中,为使用 Docker Compose 的容器工作提供支持。将该模块的依赖添加到你的构建中,如下面Maven和Gradle的列表所示:

Maven

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-docker-compose</artifactId><optional>true</optional></dependency>
</dependencies>

当这个模块作为依赖被包含时,Spring Boot 将做以下工作:

  • 在你的应用程序目录中搜索 compose.yml 和其他常见的 compose 文件名
  • 用发现的 compose.yml 来调用 docker compose up。
  • 为每个支持的容器创建服务连接bean。
  • 当应用程序关闭时调用 docker compose stop。

docker compose 或 docker-compose CLI应用程序需要在你的路径上,以便Spring Boot 的支持能够正常工作。

1. 服务连接

服务连接是与任何远程服务的连接。Spring Boot的自动配置可以消费服务连接的细节,并使用它们来建立与远程服务的连接。这样做的时候,连接细节优先于任何与连接相关的配置属性。

当使用Spring Boot的Docker Compose支持时,服务连接被建立到容器映射的端口。

Docker compose 的使用方式通常是将容器内的端口映射到你电脑上的短暂端口。例如,一个Postgres服务器可能在容器内使用5432端口运行,但在本地被映射到一个完全不同的端口。服务连接将始终发现并使用本地映射的端口。

服务连接是通过使用容器的镜像名称建立的。目前支持以下服务连接:

Connection Details

匹配于

CassandraConnectionDetails

命名为 "cassandra" 的容器。

ElasticsearchConnectionDetails

命名为 "elasticsearch" 的容器。

JdbcConnectionDetails

命名为 "gvenzl/oracle-xe", "mariadb", "mssql/server", "mysql" 或 "postgres" 的容器。

MongoConnectionDetails

命名为 "mongo" 的容器。

R2dbcConnectionDetails

命名为 "gvenzl/oracle-xe", "mariadb", "mssql/server", "mysql" 或 "postgres" 的容器。

RabbitConnectionDetails

命名为 "rabbitmq" 的容器。

RedisConnectionDetails

命名为 "redis" 的容器。

ZipkinConnectionDetails

命名为 "openzipkin/zipkin" 的容器。

2. 自定义镜像

有时你可能需要使用你自己版本的镜像来提供服务。你可以使用任何自定义镜像,只要它的行为方式与标准镜像相同。具体来说,标准镜像支持的任何环境变量也必须在你的自定义镜像中使用。

如果你的镜像使用不同的名称,你可以在 compose.yml 文件中使用一个标签,这样Spring Boot就可以提供一个服务连接。使用一个名为 org.springframework.boot.service-connection 的标签来提供服务名称。

例如:

services:redis:image: 'mycompany/mycustomredis:7.0'ports:- '6379'labels:org.springframework.boot.service-connection: redis

3. 跳过特定的容器

如果你在 compose.yml 中定义了一个不希望连接到你的应用程序的容器镜像,你可以使用标签来忽略它。任何带有 org.springframework.boot.ignore 标签的容器都会被 Spring Boot 忽略。

例如:

services:redis:image: 'redis:7.0'ports:- '6379'labels:org.springframework.boot.ignore: true

4. 使用特定的 compose 文件

如果你的编译文件与你的应用程序不在同一个目录下,或者它的名字不同,你可以在 application.properties 或 application.yaml 中使用 spring.docker.compose.file 来指向一个不同的文件。Properties 可以被定义为准确的路径或与你的应用程序相对的路径。

例如:

Yaml

spring:docker:compose:file: "../my-compose.yml"

5. 等待 Container 准备就绪

由 Docker Compose 启动的容器可能需要一些时间才能完全就绪。检查准备情况的推荐方法是在 compose.yml 文件的服务定义下添加 healthcheck 部分。

由于 healthcheck 配置在 compose.yml 文件中被省略的情况并不少见,Spring Boot也会直接检查服务的就绪情况。默认情况下,当TCP/IP连接可以建立到其映射的端口时,容器被认为是准备好了。

你可以通过在 compose.yml 文件中添加 org.springframework.boot.readiness-check.tcp.disable 标签,在每个容器的基础上禁用这个。

例如:

services:redis:image: 'redis:7.0'ports:- '6379'labels:org.springframework.boot.readiness-check.tcp.disable: true

你也可以在你的 application.properties 或 application.yaml 文件中改变超时值:

Yaml

spring:docker:compose:readiness:tcp:connect-timeout: 10sread-timeout: 5s

整体超时可以使用 spring.docker.compose.readiness.timeout 进行配置。

6. 控制 Docker Compose 的生命周期

默认情况下,Spring Boot 在你的应用程序启动时调用 docker compose up,在关闭时调用 docker compose stop。如果你喜欢不同的生命周期管理,你可以使用 spring.docker.compose.lifecycle-management 属性。

支持以下值:

  • none - 不要启动或停止Docker Compose
  • start-only - 在应用程序启动时启动Docker Compose,并让其运行。
  • start-and-stop - 在应用程序启动时启动Docker Compose,在JVM退出时停止它

此外,你可以使用 spring.docker.compose.start.command 属性来改变是使用 docker compose up 还是 docker compose start。 spring.docker.compose.stop.command 允许你配置是否使用 docker compose down 或 docker compose stop。

下面的例子显示了如何配置生命周期管理:

Yaml

spring:docker:compose:lifecycle-management: start-and-stopstart:command: startstop:command: downtimeout: 1m

7. 激活Docker Compose配置文件

Docker Compose 配置文件与 Spring 配置文件类似,它们可以让你为特定环境调整Docker Compose 配置。如果你想激活一个特定的 Docker Compose 配置文件,你可以在 application.properties 或 application.yaml 文件中使用 spring.docker.compose.profiles.active 属性:

Yaml

spring:docker:compose:profiles:active: "myprofile"

 

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

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

相关文章

全面防护!Fortinet发布混合式部署防火墙HMF

在企业IT复杂性日益增长、网络安全威胁日趋紧迫、网络安全设施可维护性逐渐降低的背景下&#xff0c;企业迫切寻求可无缝跨越所有IT区域&#xff0c;有效简化企业防护架构的统一解决方案。近日&#xff0c; Fortinet Accelerate 2023中国区15城巡展圆满落幕&#xff0c;在收官之…

【深度学习之YOLO8】视频流推断

官方V8模型下载 需要准备两个东西 simsun.ttc字体包YOLOv8官方模型成品 ScreenCapture屏幕图像类 import cv2 import mss import numpy as npclass ScreenCapture:"""parameters----------screen_resolution : Tuple[int, int]屏幕宽高&#xff0c;分别为x&a…

【文献分享】比目前最先进的模型轻30%!高效多机器人SLAM蒸馏描述符!

论文题目&#xff1a;Descriptor Distillation for Efficient Multi-Robot SLAM 中文题目&#xff1a;高效多机器人SLAM蒸馏描述符 作者&#xff1a;Xiyue Guo, Junjie Hu, Hujun Bao and Guofeng Zhang 作者机构&#xff1a;浙江大学CAD&CG国家重点实验室 香港中文大学…

Vue系列第四篇:Vue2 + Element开发登录页面

Vue开发中Element是一个比较受欢迎的界面库&#xff0c;实际开发中Vue2搭配Element UI开发&#xff0c;Vue3搭配Element plus开发&#xff0c;今天就用Vue2 Element来开发登录页面。 目录 1.Element UI介绍 1.1官网 1.2element-ui安装 2.开发环境准备 2.1core-js安装 2…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

xxljob

调度中心&#xff1a; 下载调度中心的代码 下载sql&#xff0c;执行sql 更改配置 启动项目 输入地址即可访问界面 执行器&#xff1a; 新建springboot的项目&#xff0c;导入相关依赖 添加和执行器的配置 上面的就是读取配置文件的信息 把从配置文件获取的值set到对…

家政服务小程序制作攻略揭秘

想要打造一个家政服务小程序&#xff0c;但是又不懂编程和设计&#xff1f;不用担心&#xff01;下面将为你详细介绍如何利用第三方平台&#xff0c;从零开始打造一个家政服务小程序。 首先&#xff0c;你需要找到一个适合的第三方平台&#xff0c;例如乔拓云网。在乔拓云网的【…

Rman配置参数详解

using target database control file instead of recovery catalog指的是使用目标数据库控制文件代替恢复目录 1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 设置rman备份过期条件&#xff1a;是用来决定那些备份不再需要了&#xff0c;它一共有三种可选项&…

进销存+小程序商城一体化,多门店管理解决方案-免费试用|亿发

为了适应市场变化和增强管理效率&#xff0c;越来越多的连锁&#xff0c;门店开始转向进销存小程序商城一体化&#xff0c;将进销存与订货商城结合&#xff0c;以实现更便捷、有效的经营模式&#xff0c;让企业迈向数字化时代。让我们一起来看看进销存小程序商城一体化系统相比…

MySQL索引失效原因及解决方案

MySQL索引失效原因及解决方案 在使用MySQL数据库时&#xff0c;索引是一种重要的性能优化工具。然而&#xff0c;有时候我们可能会遇到索引失效的情况。本文将介绍几种常见的MySQL索引失效原因以及相应的解决方案&#xff0c;并提供SQL语句的错误示例和正确示例。 1. 字符串字…

文本预处理——文本数据分析

目录 文本数据分析中文酒店评价语料获得训练集和验证集的标签数量分布获取训练集和验证集的句子长度分布获取训练集和验证集的正负样本长度散点分布获得训练集和验证集不同词汇总数统计获得训练集上正负的样本的高频形容词词云获得验证集上正负的样本的形容词词云 文本数据分析…

vue项目设计滚动条的第三方库

在Vue项目中&#xff0c;有几个可以用来实现自定义滚动条的第三方库。其中一些流行的库如下&#xff1a; 1.Vuescroll**&#xff1a;** Vuescroll 是一个功能丰富且高度可定制的滚动条解决方案&#xff0c;支持自定义滚动条样式和滚动行为。它可以应用于多种滚动场景&#xff0…

如何在APP开发中实现多平台兼容?

随着移动互联网的发展&#xff0c;各大 APP平台也如雨后春笋般崛起&#xff0c;现在市面上主流的 APP平台基本都已经支持 IOS、 Android、 WP等多个平台的开发&#xff0c;但对于一些只想专注于做一款 APP的企业来说&#xff0c;往往只能选择在一个平台开发一个 APP&#xff0c…

Kubernetes ConfigMap - Secret - 使用ConfigMap来配置 Redis

目录 ConfigMap &#xff1a; 参考文档&#xff1a;k8s -- ConfigMap - 简书 (jianshu.com) K8S ConfigMap使用 - 知乎 (zhihu.com) ConfigMap的作用类型&#xff1a; 可以作为卷的数据来源&#xff1a;使用 ConfigMap 来配置 Redis | Kubernetes 可以基于文件创建 Conf…

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递&#xff0c;到达L1-2路由器时&#xff0c;L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递&#xff1b; 因此L2区域的设备可以学习到L1区域的明细路由&#xff0c;进行访问&#xff1b;…

linux的一些基本指令第二期

rm rm -r 你要删除的目录名 加了-r 之后表示递归删除你要删除的目录 使用这个命名之后&#xff0c;他会一边递归到叶子节点&#xff0c;一边询问你是否要删除&#xff0c;然后会递归回来&#xff0c;在回来的途中删除&#xff1a; rm -rf 你要删除的目录名 强制执行删除操作…

TCP/IP网络编程 第二十三章:IOCP

通过重叠I/O理解IOCP 本章的IOCP&#xff08;Input Output CompletionPort&#xff0c;输入输出完成端口&#xff09;服务器端模型是很多Windows程序员关注的焦点。各位若急于求成而跳过了第21章的内容&#xff0c;建议大家最好回顾一下。因为第21章和第22章介绍了本章的背景知…

c++类和对象(拷贝构造、运算符重载、初始化列表、静态成员、友元等)

一、拷贝构造 拷贝构造函数的特征&#xff1a; 1、拷贝构造函数是构造函数的一个重载形式&#xff1b; 2、拷贝构造函数的参数只有一个且必须是同类类型对象的引用&#xff0c;使用传值方式编译器直接报错&#xff0c;因为会引发无穷递归调用。 在c中自定义类型传值传参的时…

微信批量删除好友怎么删除

微信好友太多想要批量删除不知道怎么删除&#xff0c;相信这个问题也困扰了不少人。那么怎样才能批量的删除微信好友&#xff1f;其实不难&#xff0c;可以通过新建标签删除的方式来实现批量删除好友。 怎么批量删除 微信批量删除好友的具体步骤如下&#xff1a; 1、新建标签 首…

CC1310F128系列 超低功耗低于1GHz射频 微控制器芯片

CC1310F128 是一款经济高效型超低功耗低于1GHz射频器件&#xff0c;凭借极低的有源射频和MCU电流消耗以及灵活的低功耗模式&#xff0c;CC1310F128可确保卓越的电池寿命&#xff0c;并能够在小型纽扣电池供电的情况下以及在能量采集应用中实现远距离工作。 改芯片有三个后缀&am…