小企業(yè)網(wǎng)站建設(shè)的措施群站優(yōu)化之鏈輪模式
本文為官方文檔直譯版本。原文鏈接
Spring Boot Docker Compose 支持中文文檔
- 引言
- 服務(wù)連接
- 自定義鏡像
- 跳過特定的容器
- 使用特定Compose文件
- 等待容器就緒
- 控制 Docker Compose 的生命周期
- 激活 Docker Compose 配置文件
引言
Docker Compose 是一種流行的技術(shù),可用于為應(yīng)用程序所需的服務(wù)定義和管理多個容器。通常會在應(yīng)用程序旁邊創(chuàng)建一個 compose.yml
文件,用于定義和配置服務(wù)容器。
使用 Docker Compose 的典型工作流程是:運(yùn)行 docker compose up
,在應(yīng)用程序中連接已啟動的服務(wù),完成后再運(yùn)行 docker compose down
。
Spring-boot-docker-compose
模塊可以包含在項目中,為使用 Docker Compose 處理容器提供支持。將模塊依賴關(guān)系添加到你的構(gòu)建中,如以下列表中的 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 支持正常工作,路徑上必須有
docker compose
或docker-compose CLI
應(yīng)用程序。
當(dāng)該模塊作為依賴關(guān)系包含時,Spring Boot 將執(zhí)行以下操作:
- 在應(yīng)用程序目錄中搜索
compose.yml
和其他常見的 compose 文件名 - 使用發(fā)現(xiàn)的
compose.yml
調(diào)用docker compose up
- 為每個受支持的容器創(chuàng)建服務(wù)連接Beans
- 當(dāng)應(yīng)用程序關(guān)閉時,調(diào)用
docker compose stop
如果啟動應(yīng)用程序時 Docker Compose 服務(wù)已在運(yùn)行,Spring Boot 只會為每個受支持的容器創(chuàng)建服務(wù)連接Beans。它不會再次調(diào)用 docker compose up
,也不會在關(guān)閉應(yīng)用時調(diào)用 docker compose stop
。
默認(rèn)情況下,運(yùn)行測試時 Spring Boot 的 Docker Compose 支持是禁用的。要啟用它,請將
spring.docker.compose.skip.in-tests
設(shè)置為false
。
服務(wù)連接
服務(wù)連接是與任何遠(yuǎn)程服務(wù)的連接。Spring Boot 的自動配置可以獲取服務(wù)連接的詳細(xì)信息,并利用它們建立與遠(yuǎn)程服務(wù)的連接。這樣做時,連接細(xì)節(jié)優(yōu)先于任何與連接相關(guān)的配置屬性。
使用 Spring Boot 的 Docker Compose 支持時,服務(wù)連接會建立到容器映射的端口。
Docker compose 的使用方式通常是將容器內(nèi)的端口映射到計算機(jī)上的臨時端口。例如,Postgres 服務(wù)器可以使用 5432 端口在容器內(nèi)運(yùn)行,但在本地卻被映射到一個完全不同的端口。服務(wù)連接將始終發(fā)現(xiàn)并使用本地映射的端口。
服務(wù)連接是通過使用容器的映像名稱建立的。目前支持以下服務(wù)連接:
Connection Details | Matched on |
---|---|
ActiveMQConnectionDetails | 名為 “symptoma/activemq” 的容器 |
CassandraConnectionDetails | 名為 “cassandra” 的容器 |
ElasticsearchConnectionDetails | 名為 “elasticsearch” 的容器 |
JdbcConnectionDetails | 名為 “gvenzl/oracle-free”、“gvenzl/oracle-xe”、“mariadb”、“mssql/server”、"mysql "或 "postgres "的容器 |
MongoConnectionDetails | 名為 “mongo” 的容器 |
Neo4jConnectionDetails | 名為 “neo4j” 的容器 |
OtlpMetricsConnectionDetails | 名為 “otel/opentelemetry-collector-contrib” 的容器 |
OtlpTracingConnectionDetails | 名為 “otel/opentelemetry-collector-contrib” 的容器 |
PulsarConnectionDetails | 名為 “apachepulsar/pulsar” 的容器 |
R2dbcConnectionDetails | 名為 “gvenzl/oracle-free”、“gvenzl/oracle-xe”、“mariadb”、“mssql/server”、"mysql "或 "postgres "的容器 |
RabbitConnectionDetails | 名為 “rabbitmq” 的容器 |
RedisConnectionDetails | 名為 “redis” 的容器 |
ZipkinConnectionDetails | 名為 “openzipkin/zipkin” 的容器 |
自定義鏡像
有時,您可能需要使用自己版本的鏡像來提供服務(wù)。您可以使用任何自定義鏡像,只要其行為方式與標(biāo)準(zhǔn)鏡像相同即可。具體來說,標(biāo)準(zhǔn)鏡像支持的環(huán)境變量也必須在自定義鏡像中使用。
如果你的映像使用不同的名稱,你可以在 compose.yml
文件中使用一個標(biāo)簽,這樣 Spring Boot 就能提供服務(wù)連接。使用名為 org.springframework.boot.service-connection
的標(biāo)簽提供服務(wù)名稱。
例如:
services:redis:image: 'mycompany/mycustomredis:7.0'ports:- '6379'labels:org.springframework.boot.service-connection: redis
跳過特定的容器
如果您在 compose.yml
中定義了一個容器映像,但不想將其連接到您的應(yīng)用程序,您可以使用標(biāo)簽來忽略它。任何帶有 org.springframework.boot.ignore
標(biāo)簽的容器都會被 Spring Boot 忽略。
例如:
services:redis:image: 'redis:7.0'ports:- '6379'labels:org.springframework.boot.ignore: true
使用特定Compose文件
如果編譯文件與應(yīng)用程序不在同一目錄下,或者文件名不同,可以在 application.properties
或 application.yaml
中使用 spring.docker.compose.file
指向不同的文件。屬性可以定義為準(zhǔn)確的路徑,也可以定義為與應(yīng)用程序相對的路徑。
例如:
spring:docker:compose:file: "../my-compose.yml"
等待容器就緒
Docker Compose 啟動的容器可能需要一段時間才能完全就緒。檢查就緒狀態(tài)的推薦方法是在 compose.yml
文件的服務(wù)定義下添加健康檢查(healthcheck
)部分。
由于在 compose.yml
文件中省略健康檢查(healthcheck
)配置的情況并不少見,因此 Spring Boot 也會直接檢查服務(wù)是否就緒。默認(rèn)情況下,當(dāng) TCP/IP 連接可以建立到映射端口時,容器就被視為就緒。
您可以在 compose.yml
文件中添加 org.springframework.boot.readiness-check.tcp.disable
標(biāo)簽,在每個容器上禁用此功能。
例如:
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: 10sread-timeout: 5s
整體超時可使用 spring.docker.compose.readiness.timeout
進(jìn)行配置。
控制 Docker Compose 的生命周期
默認(rèn)情況下,Spring Boot 會在應(yīng)用程序啟動時調(diào)用 docker compose up
,在關(guān)閉時調(diào)用 docker compose stop
。如果你希望使用不同的生命周期管理,可以使用 spring.docker.compose.lifecycle-management
屬性。
支持以下值:
none
- 不啟動或停止 Docker Composestart-only
- 在應(yīng)用程序啟動時啟動 Docker Compose 并讓它繼續(xù)運(yùn)行start-and-stop
- 應(yīng)用程序啟動時啟動 Docker Compose,JVM 退出時停止 Docker Compose
此外,你還可以使用 spring.docker.compose.start.command
屬性來更改是使用 docker compose up
還是 docker compose start
。通過 spring.docker.compose.stop.command
屬性,你可以配置是使用 docker compose down
還是 docker compose stop
。
下面的示例顯示了如何配置生命周期管理:
spring:docker:compose:lifecycle-management: start-and-stopstart:command: startstop:command: downtimeout: 1m
激活 Docker Compose 配置文件
Docker Compose 配置文件與 Spring 配置文件類似,可以讓你針對特定環(huán)境調(diào)整 Docker Compose 配置。如果要激活特定的 Docker Compose 配置文件,可以在application.properties
或application.yaml
文件中使用 spring.docker.compose.profiles.active
屬性:
spring:docker:compose:profiles:active: "myprofile"