带运行状况检查的Spring引导生成映像



我正在使用Spring Boot在Gradle中内置的:bootBuildImage任务构建我的Docker映像,这很方便,因为我不需要维护自己的Dockerfile

Gradle任务在底层使用了Paketo Bionic Base Stack,并将构建一个分层的Docker映像。

现在,一些编排引擎,比如Docker Swarm(或者简单的Docker Compose,用于开发目的)在容器内执行健康检查。但是,不幸的是,生成的Spring Boot Docker映像没有安装任何运行状况检查器工具,例如curlwget,因此可以使用 之类的内容。
version: '3.7'
services:
springBootApp:
image: my/springboot/docker-image
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:8080/actuator/health"]

docker-compose.yml

中的将失败。(我检查了执行器本身工作正常)

我知道curlwget不是理想的。实际上,我希望Paketo Builder能够挑选出类似于这个Health Checker BuildPack的东西。

是否有办法配置我的bootBuildImageGradle任务包括(或类似的)额外的BuildPack?

如上所述,我正在寻找一种易于维护的解决方案,并且不想编写自己的Dockerfile以能够从Paketo提供的所有最佳实践中获利。

Health Checkers构建包还没有添加到主构建器中,但它完全可以用于您的应用程序。

指令
  1. 修改build.gradle文件:

    tasks.named("bootBuildImage") {
    environment["BP_HEALTH_CHECKER_ENABLED"] = "true"
    buildpacks = ["urn:cnb:builder:paketo-buildpacks/java", "gcr.io/paketo-buildpacks/health-checker:latest"]
    }
    

    这将在构建时设置一个环境变量,指示运行状况检查程序构建包参与其中。它还告诉Spring Boot构建工具将健康检查器构建包附加到默认情况下在构建器中附带的Java构建包列表中。

    注意您可能想要添加一个特定版本的健康检查器,这取决于您。它支持标准的标签约定,如:1,:1.4,:1.4.0:latest,所以你可以固定到最新的主要/次要或特定的版本。

  2. 构建。./gradlew bootBuildImage。您将看到包含在检测中的运行状况检查器构建包。

    [creator]     ===> DETECTING
    [creator]     7 of 27 buildpacks participating
    [creator]     paketo-buildpacks/ca-certificates   3.6.0
    [creator]     paketo-buildpacks/bellsoft-liberica 10.0.0
    [creator]     paketo-buildpacks/syft              1.26.0
    [creator]     paketo-buildpacks/executable-jar    6.6.2
    [creator]     paketo-buildpacks/dist-zip          5.5.2
    [creator]     paketo-buildpacks/spring-boot       5.23.0
    [creator]     paketo-buildpacks/health-checker    1.3.1
    ...
    
  3. 可选的。对生成的映像运行pack inspect <image>。您可以看到运行状况检查器已贡献了health-check进程类型。

    Processes:
    TYPE                  SHELL        COMMAND        ARGS                                               WORK DIR
    web (default)                      java           org.springframework.boot.loader.JarLauncher        /workspace
    executable-jar                     java           org.springframework.boot.loader.JarLauncher        /workspace
    health-check                       thc                                                               /workspace
    task                               java           org.springframework.boot.loader.JarLauncher        /workspace
    
  4. 运行你的app.docker run -d --health-cmd /cnb/process/health-check -p 8080:8080 -e THC_PATH=/actuator/health <image>.

    默认使用的健康检查器是tiny-health-checker。它有其他的环境变量,你可以配置,但对于一个Spring Boot应用程序,你只需要设置执行器路径(除非你有不同的管理端口设置,然后设置THC_PORT=<management-port>也。

如果您是Maven用户,则过程非常相似。只需将这些指令替换为步骤#1,然后使用./mvnw spring-boot:build-image构建#2。

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>true</enabled>
</layers>
<image>
<env>
<BP_HEALTH_CHECKER_ENABLED>true</BP_HEALTH_CHECKER_ENABLED>
</env>
<buildpacks>
<buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
<buildpack>gcr.io/paketo-buildpacks/health-checker:latest</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>

最新更新