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"
相关文章:
SpringBoot 整合Docker Compose
Docker Compose是一种流行的技术,可以用来定义和管理你的应用程序所需的多个服务容器。通常在你的应用程序旁边创建一个 compose.yml 文件,它定义和配置服务容器。 使用 Docker Compose 的典型工作流程是运行 docker compose up,用它连接启动…...
SpringBoot整合Elasticsearch
SpringBoot整合Elasticsearch SpringBoot整合Elasticsearch有以下几种方式: 使用官方的Elasticsearch Java客户端进行集成 通过添加Elasticsearch Java客户端的依赖,可以直接在Spring Boot应用中使用原生的Elasticsearch API进行操作。参考文档 使用Sp…...
【R3F】0.9添加 shadow
开启使用shadow 在 canvas 设置属性shadows 在对应的 mesh 中设置 产生阴影castShadow和接收阴影receiveShadow 设置完成之后,即可实现阴影 ...<Canvas shadows > <mesh castShadow ><boxGeometry /><meshStandardMaterial color="mediumpurple&qu…...
【JavaEE初阶】HTTP请求的构造及HTTPS
文章目录 1.HTTP请求的构造1.1 from表单请求构造1.2 ajax构造HTTP请求1.3 Postman的使用 2. HTTPS2.1 什么是HTTPS?2.2 HTTPS中的加密机制(SSL/TLS)2.2.1 HTTP的安全问题2.2.2 对称加密2.2.3 非对称加密2.2.3 中间人问题2.2.5 证书 1.HTTP请求的构造 常见的构造HTTP 请求的方…...
探索和实践:基于Python的TD-PSOLA语音处理算法应用与优化
今天我将和大家分享一个非常有趣且具有挑战性的主题:TD-PSOLA语音处理算法在Python中的应用。作为一种在语音合成和变换中广泛使用的技术,TD-PSOLA (Time-Domain Pitch-Synchronous Overlap-Add) 提供了一种改变语音音高和时间长度而不产生显著失真的有效方法。在本篇博客中,…...
Linux 下centos 查看 -std 是否支持 C17
实际工作中,可能会遇到c的一些高级特性,例如std::invoke,此函数是c17才引入的,如何判断当前的gcc是否支持c17呢,这里提供两种办法。 1.根据gcc的版本号来推断 gcc --version,可以查看版本号,笔者…...
【算法训练营】字符串转成整数
字符串转成整数 题目题解代码 题目 点击跳转: 把字符串转换为整数 题解 【题目解析】: 本题本质是模拟实现实现C库函数atoi,不过参数给的string对象 【解题思路】: 解题思路非常简单,就是上次计算的结果10,相当于10…...
入局元宇宙,所谓的无限可能到底在哪里?
最近的热点新闻表明,人们似乎认为元宇宙已经走向“死亡”。但实际上,市场应该重新定义对元宇宙的看法,以及正视它最大的机会所在——游戏领域。 1937年5月6日,一架名为兴登堡号的巨大氢能齐柏林飞艇飞临新泽西州曼彻斯特镇上空&a…...
为什么 SSH(安全终端)的端口号是 22 !!
导读为什么 SSH(安全终端)的端口号是 22 呢,这不是一个巧合,这其中有个我(Tatu Ylonen,SSH 协议的设计者)未曾诉说的故事。 将 SSH 协议端口号设为 22 的故事 1995 年春我编写了 SSH 协议的最…...
k8s Label 2
在 k8s 中,我们会轻轻松松的部署几十上百个微服务,这些微服务的版本,副本数的不同进而会带出更多的 pod 这么多的 pod ,如何才能高效的将他们组织起来的,如果组织不好便会让管理微服务变得混乱不堪,杂乱无…...
layui踩坑记录之form表单下的button按钮默认自动提交
首先参考下面这篇文章: layui form表单下的button按钮会自动提交表单的问题以及解决方案_layui form里面其他button按钮_你用点心就行的博客-CSDN博客 他说的已经很清楚了,我再补充(啰嗦)一下: 其实就是使用form的时…...
2-vi和vim的使用
vi和vim的区别 vi 是linux系统中内置的文本编辑器vim具有程序编辑能力 vi和vim常用的三种模式 正常模式 使用vim打开一个文件,就默认进入正常模式可以使用方向键【上下左右】来移动光标可以使用【删除字符/删除整行】来处理文件内容也可以使用【复制/粘贴】快捷键…...
微服务——Nacos配置管理
目录 Nacos配置管理——实现配置管理 配置管理实践 Nacos配置管理——微服务配置拉取 Nacos配置管理——配置热更新 方式一: 编辑 方式二(推荐方式): Nacos配置管理——多环境配置共享 优先级问题 Nacos配置管理——nacos集群搭建 总结编辑 Nacos配置管理——实现配置管…...
如何为WordPress博客网站配置免费域名HTTPS证书
文章目录 如何为WordPress博客网站配置免费域名HTTPS证书前置条件:步骤1 申请免费的域名HTTPS证书步骤2 将HTTP证书配置到cpolar的配置文件中2.1 创建证书文件夹2.2 修改cpolar配置文件2.3 重启cpolar服务2.4 查看后台Wordpress隧道是否在线正常2.5 用浏览器打开站点…...
React之内置的高阶组件
React之内置的高阶组件 React内置了一些高阶组件,以便对一些组件做特殊处理,从而提高代码性能。例如React.memo、React.forwardRef 注意:高阶组件不是Reacts视图组件 什么是高阶组件 高阶组件本质是高阶函数。高阶组件接收一个组件作为参数&…...
【kubernetes系列】flannel之vxlan模式原理
概述 在Kubernetes中要保证容器之间网络互通,网络至关重要。而Kubernetes本身并没有自己实现容器网络,而是而是借助CNI标准,通过插件化的方式自由接入进来。在容器网络接入进来需要满足如下基本原则: Pod无论运行在任何节点都可…...
PostgreSQL -- 备份恢复命令
前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:RodmaChen PostgreSQL -- 备份恢复命令 一. pg_dump常用参数二. pg_dumpall三. psql四. pg_restore五.参考文章 PostgreSQL 13.7 一. pg_dump常用参数 pg_dump 把一个数据…...
【基于Spark的电影推荐系统】环境准备
概览 本科毕设做过电影推荐系统,但当时的推荐算法只有一个,现在已经忘记大部分了,当时也没有记录,因此写这个博客重新来记录一下。此外,技术栈由于快秋招原因来不及做过多的部分,因此只实现简单的功能&…...
团簇大小分布计算方法,fix ave/histo命令详解
LAMMPS是一款广泛应用于分子动力学模拟的强大软件。在模拟过程中,我们经常需要对系统的物理性质进行分析和统计。 fix ave/histo命令则是LAMMPS中一个非常有用的命令,它可以帮助我们对系统进行直方图统计分析。 本文将深入介绍fix ave/histo命令的用法和…...
CAN标准帧和拓展帧
转自:https://www.cnblogs.com/fengliu-/p/9277165.html CAN2.0B标准帧 CAN 标准帧信息为11个字节,包括两部分:信息和数据部分。前3个字节为信息部分。 位置 7 6 5 4 3 2 1 0 字节01 FF RTR DLC(数据长度&#…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
