---
title: Cloud Native Buildpacks Tutorial - 7. Spring Boot 2.3のCloud Native BuildpacksサポートでOCIイメージを作成
tags: ["Cloud Native Buildpacks Tutorial", "Cloud Native Buildpacks", "Spring Boot", "Series"]
categories: ["Dev", "Infrastructure", "CloudNativeBuildpacks", "SpringBoot"]
date: 2020-04-28T14:32:27Z
updated: 2020-04-28T14:37:11Z
---

Spring Boot 2.3で[Cloud Native Buildpacks](https://spring.io/blog/2020/01/27/creating-docker-images-with-spring-boot-2-3-0-m1)がサポートされました。
`pack` CLIを使わなくてもMavenまたはGradleでCloud Native Buildpacksを使用してOCIイメージを作成できます。

ドキュメントは https://docs.spring.io/spring-boot/docs/2.3.0.M4/maven-plugin/reference/html/#build-image です。

**目次**
<!-- toc -->

### 雛形プロジェクトの作成

```
curl https://start.spring.io/starter.tgz \
       -d bootVersion=2.3.0.M4 \
       -d artifactId=hello-cnb \
       -d baseDir=hello-cnb \
       -d dependencies=webflux,actuator \
       -d packageName=hello \
       -d applicationName=HelloCnbApplication | tar -xzvf -
cd hello-cnb
```

`pom.xml`の次の箇所を変更し、作成するイメージ名を指定します。

```xml
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
                <!-- ↓↓ -->
				<configuration>
					<image>
						<name>making/${project.artifactId}</name>
					</image>
				</configuration>
                <!-- ↑↑ -->
			</plugin>
```

### イメージの作成

次のコマンドでビルドします。

```
./mvnw spring-boot:build-image -Dmaven.test.skip=true
```

次のようなログが出力されます。

```
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< com.example:hello-cnb >------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:2.3.0.M4:build-image (default-cli) > package @ hello-cnb >>>
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ hello-cnb ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hello-cnb ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ hello-cnb ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ hello-cnb ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ hello-cnb ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ hello-cnb ---
[INFO] Building jar: /private/tmp/pack/java/hello-cnb/target/hello-cnb-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.3.0.M4:repackage (repackage) @ hello-cnb ---
[INFO] Replacing main artifact with repackaged archive
[INFO] 
[INFO] <<< spring-boot-maven-plugin:2.3.0.M4:build-image (default-cli) < package @ hello-cnb <<<
[INFO] 
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.3.0.M4:build-image (default-cli) @ hello-cnb ---
[INFO] Building image 'docker.io/making/hello-cnb:latest'
[INFO] 
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 0%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 4%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 8%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 20%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 38%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 54%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 69%
[INFO]  > Pulling builder image 'docker.io/cloudfoundry/cnb:bionic-platform-api-0.2' 100%
[INFO]  > Pulled builder image 'cloudfoundry/cnb@sha256:a601451579d595760d2678ea030ae938103c4b289e80f377b656a17e65855c59'
[INFO]  > Pulling run image 'docker.io/cloudfoundry/run:base-cnb' 3%
[INFO]  > Pulling run image 'docker.io/cloudfoundry/run:base-cnb' 100%
[INFO]  > Pulled run image 'cloudfoundry/run@sha256:fd87df6a892262c952559a164b8e2ad1be7655021ad50d520085a19a082cd379'
[INFO]  > Executing lifecycle version v0.6.1
[INFO]  > Using build cache volume 'pack-cache-80516356d7fc.build'
[INFO] 
[INFO]  > Running detector
[INFO]     [detector]    6 of 13 buildpacks participating
[INFO]     [detector]    org.cloudfoundry.openjdk                   v1.2.14
[INFO]     [detector]    org.cloudfoundry.jvmapplication            v1.1.12
[INFO]     [detector]    org.cloudfoundry.tomcat                    v1.3.18
[INFO]     [detector]    org.cloudfoundry.springboot                v1.2.13
[INFO]     [detector]    org.cloudfoundry.distzip                   v1.1.12
[INFO]     [detector]    org.cloudfoundry.springautoreconfiguration v1.1.11
[INFO] 
[INFO]  > Running analyzer
[INFO]     [analyzer]    Warning: Image "docker.io/making/hello-cnb:latest" not found
[INFO] 
[INFO]  > Running restorer
[INFO] 
[INFO]  > Running builder
[INFO]     [builder]     
[INFO]     [builder]     Cloud Foundry OpenJDK Buildpack v1.2.14
[INFO]     [builder]       OpenJDK JRE 8.0.242: Contributing to layer
[INFO]     [builder]         Downloading from https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jre_x64_linux_hotspot_8u242b08.tar.gz
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Expanding to /layers/org.cloudfoundry.openjdk/openjdk-jre
[INFO]     [builder]         Writing JAVA_HOME to shared
[INFO]     [builder]         Writing MALLOC_ARENA_MAX to shared
[INFO]     [builder]         Writing .profile.d/active-processor-count
[INFO]     [builder]       Java Security Properties v1.2.14: Contributing to layer
[INFO]     [builder]         Writing JAVA_OPTS to launch
[INFO]     [builder]       Security Provider Configurer v1.2.14: Contributing to layer
[INFO]     [builder]         Writing .profile.d/security-provider-classpath
[INFO]     [builder]         Writing .profile.d/security-provider-configurer
[INFO]     [builder]       Link-Local DNS v1.2.14: Contributing to layer
[INFO]     [builder]         Writing .profile.d/link-local-dns
[INFO]     [builder]       JVMKill Agent 1.16.0: Contributing to layer
[INFO]     [builder]         Downloading from https://java-buildpack.cloudfoundry.org/jvmkill/bionic/x86_64/jvmkill-1.16.0-RELEASE.so
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Copying to /layers/org.cloudfoundry.openjdk/jvmkill
[INFO]     [builder]         Writing JAVA_OPTS to shared
[INFO]     [builder]       Class Counter v1.2.14: Contributing to layer
[INFO]     [builder]       Memory Calculator 4.0.0: Contributing to layer
[INFO]     [builder]         Downloading from https://java-buildpack.cloudfoundry.org/memory-calculator/bionic/x86_64/memory-calculator-4.0.0.tgz
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Set $BPL_HEAD_ROOM to configure. Default 0
[INFO]     [builder]         Set $BPL_LOADED_CLASS_COUNT to configure. Default 35%!!(MISSING)o(MISSING)f classes
[INFO]     [builder]         Set $BPL_THREAD_COUNT to configure. Default 250
[INFO]     [builder]         Expanding to /layers/org.cloudfoundry.openjdk/memory-calculator
[INFO]     [builder]         Writing .profile.d/memory-calculator
[INFO]     [builder]     
[INFO]     [builder]     Cloud Foundry JVM Application Buildpack v1.1.12
[INFO]     [builder]       Executable JAR: Contributing to layer
[INFO]     [builder]         Writing CLASSPATH to shared
[INFO]     [builder]       Process types:
[INFO]     [builder]         executable-jar: java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher
[INFO]     [builder]         task:           java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher
[INFO]     [builder]         web:            java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher
[INFO]     [builder]     
[INFO]     [builder]     Cloud Foundry Spring Boot Buildpack v1.2.13
[INFO]     [builder]       Spring Boot 2.3.0.M4: Contributing to layer
[INFO]     [builder]         Writing CLASSPATH to shared
[INFO]     [builder]       5 application slices
[INFO]     [builder]       Process types:
[INFO]     [builder]         spring-boot: java -cp $CLASSPATH $JAVA_OPTS hello.actuator.HelloCnbApplication
[INFO]     [builder]         task:        java -cp $CLASSPATH $JAVA_OPTS hello.actuator.HelloCnbApplication
[INFO]     [builder]         web:         java -cp $CLASSPATH $JAVA_OPTS hello.actuator.HelloCnbApplication
[INFO]     [builder]     
[INFO]     [builder]     Cloud Foundry Spring Auto-reconfiguration Buildpack v1.1.11
[INFO]     [builder]       Spring Auto-reconfiguration 2.11.0: Contributing to layer
[INFO]     [builder]         Downloading from https://repo.spring.io/release/org/cloudfoundry/java-buildpack-auto-reconfiguration/2.11.0.RELEASE/java-buildpack-auto-reconfiguration-2.11.0.RELEASE.jar
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Copying to /layers/org.cloudfoundry.springautoreconfiguration/auto-reconfiguration
[INFO]     [builder]         Writing CLASSPATH to launch
[INFO] 
[INFO]  > Running exporter
[INFO]     [exporter]    Adding layer 'launcher'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:class-counter'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:java-security-properties'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:jvmkill'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:link-local-dns'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:memory-calculator'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:openjdk-jre'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.openjdk:security-provider-configurer'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.jvmapplication:executable-jar'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.springboot:spring-boot'
[INFO]     [exporter]    Adding layer 'org.cloudfoundry.springautoreconfiguration:auto-reconfiguration'
[INFO]     [exporter]    Adding 6/6 app layer(s)
[INFO]     [exporter]    Adding layer 'config'
[INFO]     [exporter]    *** Images (9564d335b161):
[INFO]     [exporter]          docker.io/making/hello-cnb:latest
[INFO]     [exporter]    Adding cache layer 'org.cloudfoundry.jvmapplication:executable-jar'
[INFO]     [exporter]    Adding cache layer 'org.cloudfoundry.springboot:spring-boot'
[INFO] 
[INFO] Successfully built image 'docker.io/making/hello-cnb:latest'
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  45.214 s
[INFO] Finished at: 2020-04-28T23:07:10+09:00
[INFO] ------------------------------------------------------------------------
```

2.3.0.M4時点ではイメージとして、

* Builder ... `cloudfoundry/cnb:bionic-platform-api-0.2`
* Stack ... `cloudfoundry/run:base-cnb`

が使用されています。Pack 0.10.0で使われているイメージよりも古いです。

`pack inspect-image`でイメージを解析します。

```
$ pack inspect-image making/hello-cnb
Inspecting image: making/hello-cnb

REMOTE:
(not present)

LOCAL:

Stack: io.buildpacks.stacks.bionic

Base Image:
  Reference: 40845d52d6fb6d285a320aeac821b61cff0e2863e0ff12e12138c4775aae1828
  Top Layer: sha256:f0d87426c0a82340475d73a9108b063d3d3cfbd92ef3b4af74dcd8f904475a36

Run Images:
  cloudfoundry/run:base-cnb

Buildpacks:
  ID                                                VERSION
  org.cloudfoundry.openjdk                          v1.2.14
  org.cloudfoundry.jvmapplication                   v1.1.12
  org.cloudfoundry.tomcat                           v1.3.18
  org.cloudfoundry.springboot                       v1.2.13
  org.cloudfoundry.distzip                          v1.1.12
  org.cloudfoundry.springautoreconfiguration        v1.1.11

Processes:
  TYPE                  SHELL        COMMAND                                                                           ARGS
  web (default)         bash         java -cp $CLASSPATH $JAVA_OPTS hello.actuator.HelloCnbApplication                 
  executable-jar        bash         java -cp $CLASSPATH $JAVA_OPTS org.springframework.boot.loader.JarLauncher        
  spring-boot           bash         java -cp $CLASSPATH $JAVA_OPTS hello.actuator.HelloCnbApplication                 
  task                  bash         java -cp $CLASSPATH $JAVA_OPTS hello.actuator.HelloCnbApplication 
```

### イメージの実行

作成したイメージを`docker run`で起動します。

```
docker run --rm -p 8080:8080 -e INFO_MESSAGE='Hello World!' making/hello-cnb
```

起動時に次のようなログが出力されます。

```
Container memory limit unset. Configuring JVM for 1G container.
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=86636K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx449939K (Head Room: 0%, Loaded Class Count: 12882, Thread Count: 250, Total Memory: 1073741824)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::             (v2.3.0.M4)

2020-04-28 14:19:53.106  WARN 1 --- [           main] pertySourceApplicationContextInitializer : Skipping 'cloud' property source addition because not in a cloud
2020-04-28 14:19:53.112  WARN 1 --- [           main] nfigurationApplicationContextInitializer : Skipping reconfiguration because not in a cloud
2020-04-28 14:19:53.122  INFO 1 --- [           main] hello.HelloCnbApplication                : Starting HelloCnbApplication on 9b02b1379b51 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2020-04-28 14:19:53.124  INFO 1 --- [           main] hello.HelloCnbApplication                : No active profile set, falling back to default profiles: default
2020-04-28 14:19:54.757  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-04-28 14:19:55.450  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080
2020-04-28 14:19:55.455  INFO 1 --- [           main] hello.HelloCnbApplication                : Started HelloCnbApplication in 2.874 seconds (JVM running for 3.687)
```

JVMのメモリが自動で設定されていることに注目してください。

アプリケーションにアクセスします。

```
$ curl localhost:8080/actuator/health -w '\n'
{"status":"UP"}

$ curl localhost:8080/actuator/info -w '\n'
{"message":"Hello World!"}
```

Docker Imageのサイズを確認します。

```
$ docker images | grep making/hello-cnb
making/hello-cnb                     latest                    40083389f3d9        40 years ago        225MB
```

### Builderの変更

`pom.xml`の次の箇所を変更し、使用するBuilderを指定します。

```xml
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>                
				<configuration>
					<image>
						<name>making/${project.artifactId}</name>
						<!-- ↓↓ -->
						<builder>gcr.io/paketo-buildpacks/builder:base</builder>
						<!-- ↑↑ -->
					</image>
				</configuration>
			</plugin>
```

次のコマンドでビルドします。

```
./mvnw spring-boot:build-image -Dmaven.test.skip=true
```

次のようなログが出力されます。

```
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< com.example:hello-cnb >------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:2.3.0.M4:build-image (default-cli) > package @ hello-cnb >>>
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ hello-cnb ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ hello-cnb ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ hello-cnb ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ hello-cnb ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ hello-cnb ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ hello-cnb ---
[INFO] Building jar: /private/tmp/pack/java/hello-cnb/target/hello-cnb-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.3.0.M4:repackage (repackage) @ hello-cnb ---
[INFO] Replacing main artifact with repackaged archive
[INFO] 
[INFO] <<< spring-boot-maven-plugin:2.3.0.M4:build-image (default-cli) < package @ hello-cnb <<<
[INFO] 
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.3.0.M4:build-image (default-cli) @ hello-cnb ---
[INFO] Building image 'docker.io/making/hello-cnb:latest'
[INFO] 
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 0%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 7%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 14%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 25%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 43%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 61%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 73%
[INFO]  > Pulling builder image 'gcr.io/paketo-buildpacks/builder:base' 100%
[INFO]  > Pulled builder image 'gcr.io/paketo-buildpacks/builder@sha256:b1f509937af906cd8a14d5563356dd997c09148a381cbfef9896cb06aa51959e'
[INFO]  > Pulling run image 'gcr.io/paketo-buildpacks/run:base-cnb' 100%
[INFO]  > Pulled run image 'cloudfoundry/run@sha256:fd87df6a892262c952559a164b8e2ad1be7655021ad50d520085a19a082cd379'
[INFO]  > Executing lifecycle version v0.7.3
[INFO]  > Using build cache volume 'pack-cache-80516356d7fc.build'
[INFO] 
[INFO]  > Running detector
[INFO]     [detector]    5 of 11 buildpacks participating
[INFO]     [detector]    paketo-buildpacks/bellsoft-liberica 2.3.1
[INFO]     [detector]    paketo-buildpacks/executable-jar    1.2.1
[INFO]     [detector]    paketo-buildpacks/apache-tomcat     1.1.1
[INFO]     [detector]    paketo-buildpacks/spring-boot       1.5.1
[INFO]     [detector]    paketo-buildpacks/dist-zip          1.2.1
[INFO] 
[INFO]  > Running analyzer
[INFO] 
[INFO]  > Running restorer
[INFO] 
[INFO]  > Running builder
[INFO]     [builder]     
[INFO]     [builder]     Paketo BellSoft Liberica Buildpack 2.3.1
[INFO]     [builder]         Set $BP_JAVA_VERSION to configure the Java version. Default 11.*.
[INFO]     [builder]         Set $BPL_HEAD_ROOM to configure the headroom in memory calculation. Default 0.
[INFO]     [builder]         Set $BPL_LOADED_CLASS_COUNT to configure the number of loaded classes in memory calculation. Default 35% of classes.
[INFO]     [builder]         Set $BPL_THREAD_COUNT to configure the number of threads in memory calculation. Default 250.
[INFO]     [builder]       BellSoft Liberica JRE 8.0.252: Contributing to layer
[INFO]     [builder]         Downloading from https://github.com/bell-sw/Liberica/releases/download/8u252+9/bellsoft-jre8u252+9-linux-amd64.tar.gz
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Expanding to /layers/paketo-buildpacks_bellsoft-liberica/jre
[INFO]     [builder]         Writing env/JAVA_HOME.override
[INFO]     [builder]         Writing env/MALLOC_ARENA_MAX.override
[INFO]     [builder]         Writing profile.d/active-processor-count.sh
[INFO]     [builder]       JVMKill Agent 1.16.0: Contributing to layer
[INFO]     [builder]         Downloading from https://github.com/cloudfoundry/jvmkill/releases/download/v1.16.0.RELEASE/jvmkill-1.16.0-RELEASE.so
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Copying to /layers/paketo-buildpacks_bellsoft-liberica/jvmkill
[INFO]     [builder]         Writing env/JAVA_OPTS.append
[INFO]     [builder]       Link-Local DNS: Contributing to layer
[INFO]     [builder]         Copying to /layers/paketo-buildpacks_bellsoft-liberica/link-local-dns
[INFO]     [builder]         Writing profile.d/link-local-dns.sh
[INFO]     [builder]       Memory Calculator 4.0.0: Contributing to layer
[INFO]     [builder]         Downloading from https://github.com/cloudfoundry/java-buildpack-memory-calculator/releases/download/v4.0.0/memory-calculator-4.0.0.tgz
[INFO]     [builder]         Verifying checksum
[INFO]     [builder]         Expanding to /layers/paketo-buildpacks_bellsoft-liberica/memory-calculator
[INFO]     [builder]         Writing profile.d/memory-calculator.sh
[INFO]     [builder]       Class Counter: Contributing to layer
[INFO]     [builder]         Copying to /layers/paketo-buildpacks_bellsoft-liberica/class-counter
[INFO]     [builder]       Java Security Properties: Contributing to layer
[INFO]     [builder]         Writing env.launch/JAVA_OPTS.append
[INFO]     [builder]         Writing env.launch/JAVA_SECURITY_PROPERTIES.override
[INFO]     [builder]       Security Providers Configurer: Contributing to layer
[INFO]     [builder]         Copying to /layers/paketo-buildpacks_bellsoft-liberica/security-providers-configurer
[INFO]     [builder]         Writing profile.d/security-providers-classpath.sh
[INFO]     [builder]         Writing profile.d/security-providers-configurer.sh
[INFO]     [builder]     
[INFO]     [builder]     Paketo Executable JAR Buildpack 1.2.1
[INFO]     [builder]         Writing env/CLASSPATH
[INFO]     [builder]       Process types:
[INFO]     [builder]         executable-jar: java -cp "${CLASSPATH}" ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher
[INFO]     [builder]         task:           java -cp "${CLASSPATH}" ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher
[INFO]     [builder]         web:            java -cp "${CLASSPATH}" ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher
[INFO]     [builder]     
[INFO]     [builder]     Paketo Spring Boot Buildpack 1.5.1
[INFO]     [builder]       Image labels:
[INFO]     [builder]         org.opencontainers.image.title
[INFO]     [builder]         org.opencontainers.image.version
[INFO]     [builder]         org.springframework.boot.spring-configuration-metadata.json
[INFO]     [builder]         org.springframework.boot.version
[INFO] 
[INFO]  > Running exporter
[INFO]     [exporter]    Adding layer 'launcher'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:class-counter'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:jre'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:jvmkill'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:link-local-dns'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:memory-calculator'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/bellsoft-liberica:security-providers-configurer'
[INFO]     [exporter]    Adding layer 'paketo-buildpacks/executable-jar:class-path'
[INFO]     [exporter]    Adding 1/1 app layer(s)
[INFO]     [exporter]    Adding layer 'config'
[INFO]     [exporter]    *** Images (741c050dad1f):
[INFO]     [exporter]          docker.io/making/hello-cnb:latest
[INFO]     [exporter]    Adding cache layer 'paketo-buildpacks/executable-jar:class-path'
[INFO] 
[INFO] Successfully built image 'docker.io/making/hello-cnb:latest'
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  35.993 s
[INFO] Finished at: 2020-04-28T23:29:25+09:00
[INFO] ------------------------------------------------------------------------
```

指定したPaketoのBuilderが使用されていることがわかります。

`pack inspect-image`でイメージを解析します。

```
$ pack inspect-image making/hello-cnb
Inspecting image: making/hello-cnb

REMOTE:
(not present)

LOCAL:

Stack: io.buildpacks.stacks.bionic

Base Image:
  Reference: 40845d52d6fb6d285a320aeac821b61cff0e2863e0ff12e12138c4775aae1828
  Top Layer: sha256:f0d87426c0a82340475d73a9108b063d3d3cfbd92ef3b4af74dcd8f904475a36

Run Images:
  gcr.io/paketo-buildpacks/run:base-cnb

Buildpacks:
  ID                                         VERSION
  paketo-buildpacks/bellsoft-liberica        2.3.1
  paketo-buildpacks/executable-jar           1.2.1
  paketo-buildpacks/apache-tomcat            1.1.1
  paketo-buildpacks/spring-boot              1.5.1
  paketo-buildpacks/dist-zip                 1.2.1

Processes:
  TYPE                  SHELL        COMMAND                                                                                 ARGS
  web (default)         bash         java -cp "${CLASSPATH}" ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher        
  executable-jar        bash         java -cp "${CLASSPATH}" ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher        
  task                  bash         java -cp "${CLASSPATH}" ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher  
```
