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

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.lryc.cn/news/96775.html

相关文章:

  • SpringBoot整合Elasticsearch
  • 【R3F】0.9添加 shadow
  • 【JavaEE初阶】HTTP请求的构造及HTTPS
  • 探索和实践:基于Python的TD-PSOLA语音处理算法应用与优化
  • Linux 下centos 查看 -std 是否支持 C17
  • 【算法训练营】字符串转成整数
  • 入局元宇宙,所谓的无限可能到底在哪里?
  • 为什么 SSH(安全终端)的端口号是 22 !!
  • k8s Label 2
  • layui踩坑记录之form表单下的button按钮默认自动提交
  • 2-vi和vim的使用
  • 微服务——Nacos配置管理
  • 如何为WordPress博客网站配置免费域名HTTPS证书
  • React之内置的高阶组件
  • 【kubernetes系列】flannel之vxlan模式原理
  • PostgreSQL -- 备份恢复命令
  • 【基于Spark的电影推荐系统】环境准备
  • 团簇大小分布计算方法,fix ave/histo命令详解
  • CAN标准帧和拓展帧
  • android 清除缓存方法
  • 介绍下你们项目中各微服务之间怎么调用的?
  • MySql提示:The Server Quit Without Updating PID File(…)失败 103.36.167
  • FPGA学习——按键消抖的两种实现方法
  • SecureCRT如何将复制的内容粘贴到word中仍然保持原有字体颜色
  • 微信小程序分享页面代码
  • Hadoop 之 Hbase 配置与使用(四)
  • 使用TensorFlow和VGG-19模型实现艺术风格迁移:一步一步打造你的数字艺术世界
  • FBX/GLTF在线转换
  • Tensorflow(二)
  • NoSQL之 Redis 部署,配置与优化