Docker Compose Support
Docker Compose 是一项流行的技术,可用于定义和管理应用程序所需服务的多个容器。通常在您的应用程序旁边创建一个 `@`3 文件,用于定义和配置服务容器。 使用 Docker Compose 的典型工作流是运行 `@`4,使用它连接到已启动的服务,在完成后运行 `@`5。 `@`6 模块可以包含在项目中,以提供使用 Docker Compose 处理容器的支持。将模块依赖项添加到您的构建中,如以下针对 Maven 和 Gradle 的清单中所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-docker-compose</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
dependencies {
developmentOnly("org.springframework.boot:spring-boot-docker-compose")
}
当这个模块作为依赖项包含时,Spring Boot 将执行以下操作:
-
在您的应用程序目录中搜索 `@`7 和其他常见的 Compose 文件名
-
使用发现的 `@`9 调用 `@`8
-
为每个受支持的容器创建服务连接 bean
-
在应用程序关闭时调用 `@`10
如果在启动应用程序时 Docker Compose 服务已经运行,Spring Boot 将只为每个受支持的容器创建服务连接 bean。它不会再次调用 `@`11,也不会在应用程序关闭时调用 `@`12。
默认情况下,在运行测试时 Spring Boot 的 Docker Compose 支持被禁用。要启用它,请将 |
Service Connections
服务连接是到任何远程服务的连接。Spring Boot 的自动配置可以获取服务连接的详细信息,并使用它们来建立与远程服务的连接。执行此操作时,连接详细信息优先于任何与连接相关的配置属性。
使用 Spring Boot 的 Docker Compose 支持时,服务连接建立到容器映射的端口。
Docker Compose 通常以使容器内的端口映射到您计算机上的临时端口的方式使用。例如,Postgres 服务可以在容器内使用端口 5432 运行,但被映射到本地完全不同的端口。服务连接将始终发现并使用本地映射的端口。 |
通过使用容器的镜像名称来建立服务连接。当前支持以下服务连接:
Connection Details | Matched on |
---|---|
|
名称为“symptoma/activemq”或“apache/activemq-classic”的容器 |
|
Containers named "apache/activemq-artemis" |
|
名称为“cassandra”或“bitnami/cassandra”的容器 |
|
名称为“elasticsearch”或“bitnami/elasticsearch”的容器 |
|
名为“gvenzl/oracle-free”、“gvenzl/oracle-xe”、“mariadb”、“bitnami/mariadb”、“mssql/server”、“mysql”、“bitnami/mysql”、“postgres”或“bitnami/postgresql”的容器 |
|
Containers named "osixia/openldap" |
|
名为“mongo”或“bitnami/mongodb”的容器 |
|
名为“neo4j”或“bitnami/neo4j”的容器 |
|
Containers named "otel/opentelemetry-collector-contrib" |
|
Containers named "otel/opentelemetry-collector-contrib" |
|
Containers named "apachepulsar/pulsar" |
|
名为“gvenzl/oracle-free”、“gvenzl/oracle-xe”、“mariadb”、“bitnami/mariadb”、“mssql/server”、“mysql”、“bitnami/mysql”、“postgres”或“bitnami/postgresql”的容器 |
|
名为“rabbitmq”或“bitnami/rabbitmq”的容器 |
|
名为“redis”或“bitnami/redis”的容器 |
|
Containers named "openzipkin/zipkin". |
Custom Images
有时你可能需要使用自己版本的映像来提供服务。只要行为与标准映像一致,你就可以使用任何自定义映像。具体而言,标准映像支持的任何环境变量也必须在你的自定义映像中使用。
如果你的映像使用不同的名称,则可以在你的 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
Skipping Specific Containers
如果你在 compose.yml
中定义了不想连接到你的应用程序的容器映像,则可以使用标签来忽略它。带有标签 org.springframework.boot.ignore
的任何容器都将被 Spring Boot 忽略。
例如:
services:
redis:
image: 'redis:7.0'
ports:
- '6379'
labels:
org.springframework.boot.ignore: true
Using a Specific Compose File
如果你的 Compose 文件与你的应用程序不在同一个目录中,或名称不同,则可以在 application.properties
或 application.yaml
中使用 configprop:spring.docker.compose.file[]
指向不同的文件。属性可以定义为确切路径或相对于你的应用程序的路径。
例如:
spring: docker: compose: file: "../my-compose.yml"
Waiting for Container Readiness
由 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
文件中更改超时值:
spring: docker: compose: readiness: tcp: connect-timeout: 10s read-timeout: 5s
可以使用 configprop:spring.docker.compose.readiness.timeout[]
配置总体超时。
Controlling the Docker Compose Lifecycle
默认情况下,Spring Boot 在你的应用程序启动时调用 docker compose up
,在应用程序关闭时调用 docker compose stop
。如果你希望有不同的生命周期管理,可以使用 configprop:spring.docker.compose.lifecycle-management[]
属性。
支持以下值:
-
none
- 不启动或停止 Docker Compose -
start-only
- 在应用程序启动时启动 Docker Compose,并使其运行 -
start-and-stop
- 在应用程序启动时启动 Docker Compose,并在 JVM 退出时停止 Docker Compose
此外,你可以使用 configprop:spring.docker.compose.start.command[] 属性来更改使用 docker compose up
还是 docker compose start
。configprop:spring.docker.compose.stop.command[] 允许你配置使用 docker compose down
还是 docker compose stop
。
以下示例显示如何配置生命周期管理:
spring: docker: compose: lifecycle-management: start-and-stop start: command: start stop: command: down timeout: 1m