Cloud Native Buildpacks Tutorial - 2.2. ┗ gcr.io/paketo-buildpacks/builder:base BuilderでJavaアプリ(Servlet)のOCIイメージを作成

gcr.io/paketo-buildpacks/builder:baseでJava(Servlet)のアプリケーションのOCIイメージを作成します。

BuilderとStackを予めpullしておいてください。

docker pull gcr.io/paketo-buildpacks/builder:base
docker pull gcr.io/paketo-buildpacks/run:base-cnb

次のコマンドで"Hello World"アプリケーションを作成します。

mkdir -p hello-servlet/src/main/java/hello
cd hello-servlet
cat <<'EOF' > src/main/java/hello/HelloServlet.java
package hello;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "hello", urlPatterns = "/")
public class HelloServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		res.setContentType("text/plain;charset=utf-8");
		PrintWriter pw = res.getWriter();
		pw.print("Hello World!");
		pw.flush();
	}
}
EOF
cat <<'EOF' > pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>hello</groupId>
    <artifactId>hello-servlet</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
EOF

pack buildコマンドでイメージを作成します。

Javaの場合はソースからビルドする方法とjar/warファイルからビルドする方法があります。

ソースからビルドする場合

pack build making/pack-servlet --no-pull --builder gcr.io/paketo-buildpacks/builder:base

BuilderとStackを事前にpullしていない場合は--no-pullを外せば、ビルド時にBuilderとStackもpullしますが、ビルドが遅くなります。

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

===> DETECTING
[detector] 6 of 15 buildpacks participating
[detector] paketo-buildpacks/bellsoft-liberica 2.5.3
[detector] paketo-buildpacks/maven             1.2.2
[detector] paketo-buildpacks/executable-jar    1.2.3
[detector] paketo-buildpacks/apache-tomcat     1.1.3
[detector] paketo-buildpacks/dist-zip          1.3.0
[detector] paketo-buildpacks/spring-boot       1.5.3
===> ANALYZING
[analyzer] Previous image with name "index.docker.io/making/pack-servlet:latest" not found
===> RESTORING
===> BUILDING
[builder] 
[builder] Paketo BellSoft Liberica Buildpack 2.5.3
[builder]     Set $BPL_JVM_HEAD_ROOM to configure the headroom in memory calculation. Default 0.
[builder]     Set $BPL_JVM_LOADED_CLASS_COUNT to configure the number of loaded classes in memory calculation. Default 35% of classes.
[builder]     Set $BPL_JVM_THREAD_COUNT to configure the number of threads in memory calculation. Default 250.
[builder]     Set $BP_JVM_VERSION to configure the Java version. Default 11.*.
[builder]   BellSoft Liberica JDK 11.0.7: Contributing to layer
[builder]     Downloading from https://github.com/bell-sw/Liberica/releases/download/11.0.7+10/bellsoft-jdk11.0.7+10-linux-amd64.tar.gz
[builder]     Verifying checksum
[builder]     Expanding to /layers/paketo-buildpacks_bellsoft-liberica/jdk
[builder]     Populating with 133 container certificates
[builder]     Writing env.build/JAVA_HOME.override
[builder]     Writing env.build/JDK_HOME.override
[builder]   BellSoft Liberica JRE 11.0.7: Contributing to layer
[builder]     Downloading from https://github.com/bell-sw/Liberica/releases/download/11.0.7+10/bellsoft-jre11.0.7+10-linux-amd64.tar.gz
[builder]     Verifying checksum
[builder]     Expanding to /layers/paketo-buildpacks_bellsoft-liberica/jre
[builder]     Writing env.launch/JAVA_HOME.override
[builder]     Writing env.launch/MALLOC_ARENA_MAX.override
[builder]     Writing profile.d/active-processor-count.sh
[builder]   Memory Calculator 4.0.0: Contributing to layer
[builder]     Downloading from https://github.com/cloudfoundry/java-buildpack-memory-calculator/releases/download/v4.0.0/memory-calculator-4.0.0.tgz
[builder]     Verifying checksum
[builder]     Expanding to /layers/paketo-buildpacks_bellsoft-liberica/memory-calculator
[builder]     Writing profile.d/memory-calculator.sh
[builder]   Class Counter: Contributing to layer
[builder]     Copying to /layers/paketo-buildpacks_bellsoft-liberica/class-counter
[builder]   JVMKill Agent 1.16.0: Contributing to layer
[builder]     Downloading from https://github.com/cloudfoundry/jvmkill/releases/download/v1.16.0.RELEASE/jvmkill-1.16.0-RELEASE.so
[builder]     Verifying checksum
[builder]     Copying to /layers/paketo-buildpacks_bellsoft-liberica/jvmkill
[builder]     Writing env.launch/JAVA_OPTS.append
[builder]   Link-Local DNS: Contributing to layer
[builder]     Copying to /layers/paketo-buildpacks_bellsoft-liberica/link-local-dns
[builder]     Writing profile.d/link-local-dns.sh
[builder]   Java Security Properties: Contributing to layer
[builder]     Writing env.launch/JAVA_OPTS.append
[builder]     Writing env.launch/JAVA_SECURITY_PROPERTIES.override
[builder]   Security Providers Configurer: Contributing to layer
[builder]     Copying to /layers/paketo-buildpacks_bellsoft-liberica/security-providers-configurer
[builder]     Writing profile.d/security-providers-classpath.sh
[builder]     Writing profile.d/security-providers-configurer.sh
[builder]   OpenSSL Security Provider 1.0.2: Contributing to layer
[builder]     Downloading from https://jitpack.io/com/github/paketo-buildpacks/openssl-security-provider/1.0.2/openssl-security-provider-1.0.2.jar
[builder]     Verifying checksum
[builder]     Copying to /layers/paketo-buildpacks_bellsoft-liberica/openssl-security-provider
[builder]     Writing env.launch/SECURITY_PROVIDERS.append
[builder]     Writing env.launch/SECURITY_PROVIDERS_CLASSPATH
[builder]     Writing profile.d/openssl-security-provider.sh
[builder] 
[builder] Paketo Maven Buildpack 1.2.2
[builder]     Set $BP_MAVEN_BUILD_ARGUMENTS to configure the arguments to pass to Maven. Default -Dmaven.test.skip=true package.
[builder]     Set $BP_MAVEN_BUILT_ARTIFACT to configure the built application artifact explicitly.  Supersedes $BP_MAVEN_BUILT_MODULE. Default target/*.[jw]ar.
[builder]     Set $BP_MAVEN_BUILT_MODULE to configure the module to find application artifact in
[builder]     Set $BP_MAVEN_SETTINGS to configure  the contents of a `settings.xml` file to be used at build time
[builder]   Apache Maven 3.6.3: Contributing to layer
[builder]     Downloading from https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.tar.gz
[builder]     Verifying checksum
[builder]     Expanding to /layers/paketo-buildpacks_maven/maven
[builder]     Creating cache directory /home/cnb/.m2
[builder]   Compiled Application: Contributing to layer
[builder]     Executing mvn -Dmaven.test.skip=true package
[builder] [INFO] Scanning for projects...
[builder] [INFO] 
[builder] [INFO] ------------------------< hello:hello-servlet >-------------------------
[builder] [INFO] Building hello-servlet 0.0.1-SNAPSHOT
[builder] [INFO] --------------------------------[ war ]---------------------------------
[builder] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8.1 kB at 8.2 kB/s)
[builder] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9.2 kB at 33 kB/s)
[builder] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/22/maven-parent-22.pom
..(略)..
[builder] [INFO] Webapp assembled in [24 msecs]
[builder] [INFO] Building war: /workspace/target/hello-servlet-0.0.1-SNAPSHOT.war
[builder] [INFO] ------------------------------------------------------------------------
[builder] [INFO] BUILD SUCCESS
[builder] [INFO] ------------------------------------------------------------------------
[builder] [INFO] Total time:  01:05 min
[builder] [INFO] Finished at: 2020-05-11T02:21:26Z
[builder] [INFO] ------------------------------------------------------------------------
[builder]   Removing source code
[builder] 
[builder] Paketo Apache Tomcat Buildpack 1.1.3
[builder]     Set $BPL_TOMCAT_ACCESS_LOGGING to configure the Tomcat access logging state. Default disabled.
[builder]     Set $BP_TOMCAT_CONTEXT_PATH to configure the application context path
[builder]     Set $BP_TOMCAT_EXT_CONF_SHA256 to configure the SHA256 hash of the external Tomcat configuration archive
[builder]     Set $BP_TOMCAT_EXT_CONF_STRIP to configure the number of directory components to strip from the external Tomcat configuration archive. Default 0.
[builder]     Set $BP_TOMCAT_EXT_CONF_URI to configure the download location of the external Tomcat configuration
[builder]     Set $BP_TOMCAT_EXT_CONF_VERSION to configure the version of the external Tomcat configuration
[builder]     Set $BP_TOMCAT_VERSION to configure the Tomcat version. Default 9.*.
[builder]   Apache Tomcat 9.0.34: Contributing to layer
[builder]     Downloading from https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
[builder]     Verifying checksum
[builder]     Expanding to /layers/paketo-buildpacks_apache-tomcat/catalina-home
[builder]     Writing env.launch/CATALINA_HOME.override
[builder]   Apache Tomcat Support: Contributing to layer
[builder]     Copying context.xml to /layers/paketo-buildpacks_apache-tomcat/catalina-base/conf
[builder]     Copying logging.properties to /layers/paketo-buildpacks_apache-tomcat/catalina-base/conf
[builder]     Copying server.xml to /layers/paketo-buildpacks_apache-tomcat/catalina-base/conf
[builder]     Copying web.xml to /layers/paketo-buildpacks_apache-tomcat/catalina-base/conf
[builder]   Apache Tomcat Access Logging Support 3.3.0
[builder]     Downloading from https://repo.spring.io/release/org/cloudfoundry/tomcat-access-logging-support/3.3.0.RELEASE/tomcat-access-logging-support-3.3.0.RELEASE.jar
[builder]     Verifying checksum
[builder]     Copying to /layers/paketo-buildpacks_apache-tomcat/catalina-base/lib
[builder]   Apache Tomcat Lifecycle Support 3.3.0
[builder]     Downloading from https://repo.spring.io/release/org/cloudfoundry/tomcat-lifecycle-support/3.3.0.RELEASE/tomcat-lifecycle-support-3.3.0.RELEASE.jar
[builder]     Verifying checksum
[builder]     Copying to /layers/paketo-buildpacks_apache-tomcat/catalina-base/lib
[builder]   Apache Tomcat Logging Support 3.3.0
[builder]     Downloading from https://repo.spring.io/release/org/cloudfoundry/tomcat-logging-support/3.3.0.RELEASE/tomcat-logging-support-3.3.0.RELEASE.jar
[builder]     Verifying checksum
[builder]     Copying to /layers/paketo-buildpacks_apache-tomcat/catalina-base/bin
[builder]     Writing /layers/paketo-buildpacks_apache-tomcat/catalina-base/bin/setenv.sh
[builder]   Mounting application at ROOT
[builder]     Writing env.launch/CATALINA_BASE.override
[builder]     Writing profile.d/access-logging-support.sh
[builder]   Process types:
[builder]     task:   catalina.sh run
[builder]     tomcat: catalina.sh run
[builder]     web:    catalina.sh run
===> EXPORTING
[exporter] Adding layer 'launcher'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:class-counter'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:jre'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:jvmkill'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:link-local-dns'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:memory-calculator'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:openssl-security-provider'
[exporter] Adding layer 'paketo-buildpacks/bellsoft-liberica:security-providers-configurer'
[exporter] Adding layer 'paketo-buildpacks/apache-tomcat:catalina-base'
[exporter] Adding layer 'paketo-buildpacks/apache-tomcat:catalina-home'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'config'
[exporter] *** Images (5471273d1b79):
[exporter]       index.docker.io/making/pack-servlet:latest
[exporter] Adding cache layer 'paketo-buildpacks/bellsoft-liberica:jdk'
[exporter] Adding cache layer 'paketo-buildpacks/maven:application'
[exporter] Adding cache layer 'paketo-buildpacks/maven:cache'
[exporter] Adding cache layer 'paketo-buildpacks/maven:maven'
Successfully built image making/pack-servlet

pack build時に--publishオプションをつけると、Docker Registryでのpushを行います。事前にdocker loginが必要です。

Mavenによるソースコードから始まるため、初回ビルド時には依存ライブラリのダウンロードが始まります。 依存ライブラリはキャッシュされ、二回目以降はキャッシュが使用されます。

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

$ pack inspect-image making/pack-servlet
REMOTE:
(not present)

LOCAL:

Stack: io.buildpacks.stacks.bionic

Base Image:
  Reference: 5b753a27144e7034add3089565bd3a18a4e5790efce0c9771d2ed4bb40d6fc60
  Top Layer: sha256:2d0a8ddecbd1b537f555a120356f4dc9ff5855b2aa16b9d0edd7f9b5c3f9ade6

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

Buildpacks:
  ID                                         VERSION
  paketo-buildpacks/bellsoft-liberica        2.5.3
  paketo-buildpacks/maven                    1.2.2
  paketo-buildpacks/executable-jar           1.2.3
  paketo-buildpacks/apache-tomcat            1.1.3
  paketo-buildpacks/dist-zip                 1.3.0
  paketo-buildpacks/spring-boot              1.5.3

Processes:
  TYPE                 SHELL        COMMAND                ARGS
  web (default)        bash         catalina.sh run        
  task                 bash         catalina.sh run        
  tomcat               bash         catalina.sh run    

Maven以外にもGradleによるビルドもサポートされています。

warからビルドする場合

まずはソースコードをビルドしてwarファイルを作成します。

mvn -Dmaven.test.skip=true clean package

pack build-pオプションで作成したwarファイルのパスを指定します。

pack build making/pack-servlet --no-pull -p target/hello-servlet-0.0.1-SNAPSHOT.war --builder gcr.io/paketo-buildpacks/builder:base

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

===> DETECTING
[detector] 4 of 15 buildpacks participating
[detector] paketo-buildpacks/bellsoft-liberica 2.5.3
[detector] paketo-buildpacks/apache-tomcat     1.1.3
[detector] paketo-buildpacks/dist-zip          1.3.0
[detector] paketo-buildpacks/spring-boot       1.5.3
===> ANALYZING
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:openssl-security-provider" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:security-providers-configurer" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:class-counter" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:java-security-properties" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jre" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jvmkill" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:link-local-dns" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:memory-calculator" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/apache-tomcat:catalina-base" from app image
[analyzer] Restoring metadata for "paketo-buildpacks/apache-tomcat:catalina-home" from app image
===> RESTORING
===> BUILDING
[builder] 
[builder] Paketo BellSoft Liberica Buildpack 2.5.3
[builder]     Set $BPL_JVM_HEAD_ROOM to configure the headroom in memory calculation. Default 0.
[builder]     Set $BPL_JVM_LOADED_CLASS_COUNT to configure the number of loaded classes in memory calculation. Default 35% of classes.
[builder]     Set $BPL_JVM_THREAD_COUNT to configure the number of threads in memory calculation. Default 250.
[builder]     Set $BP_JVM_VERSION to configure the Java version. Default 11.*.
[builder]   BellSoft Liberica JRE 11.0.7: Reusing cached layer
[builder]   Memory Calculator 4.0.0: Reusing cached layer
[builder]   Class Counter: Reusing cached layer
[builder]   JVMKill Agent 1.16.0: Reusing cached layer
[builder]   Link-Local DNS: Reusing cached layer
[builder]   Java Security Properties: Reusing cached layer
[builder]   Security Providers Configurer: Reusing cached layer
[builder]   OpenSSL Security Provider 1.0.2: Reusing cached layer
[builder] 
[builder] Paketo Apache Tomcat Buildpack 1.1.3
[builder]     Set $BPL_TOMCAT_ACCESS_LOGGING to configure the Tomcat access logging state. Default disabled.
[builder]     Set $BP_TOMCAT_CONTEXT_PATH to configure the application context path
[builder]     Set $BP_TOMCAT_EXT_CONF_SHA256 to configure the SHA256 hash of the external Tomcat configuration archive
[builder]     Set $BP_TOMCAT_EXT_CONF_STRIP to configure the number of directory components to strip from the external Tomcat configuration archive. Default 0.
[builder]     Set $BP_TOMCAT_EXT_CONF_URI to configure the download location of the external Tomcat configuration
[builder]     Set $BP_TOMCAT_EXT_CONF_VERSION to configure the version of the external Tomcat configuration
[builder]     Set $BP_TOMCAT_VERSION to configure the Tomcat version. Default 9.*.
[builder]   Apache Tomcat 9.0.34: Reusing cached layer
[builder]   Apache Tomcat Support: Reusing cached layer
[builder]   Process types:
[builder]     task:   catalina.sh run
[builder]     tomcat: catalina.sh run
[builder]     web:    catalina.sh run
===> EXPORTING
[exporter] Reusing layer 'launcher'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:class-counter'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:jre'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:jvmkill'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:link-local-dns'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:memory-calculator'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:openssl-security-provider'
[exporter] Reusing layer 'paketo-buildpacks/bellsoft-liberica:security-providers-configurer'
[exporter] Reusing layer 'paketo-buildpacks/apache-tomcat:catalina-base'
[exporter] Reusing layer 'paketo-buildpacks/apache-tomcat:catalina-home'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'config'
[exporter] *** Images (f18b05e6c3be):
[exporter]       index.docker.io/making/pack-servlet:latest
Successfully built image making/pack-servlet

今回はイメージビルド時にMavenによるビルドは実行されません。

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

$ pack inspect-image making/pack-servlet
Inspecting image: making/pack-servlet

REMOTE:
(not present)

LOCAL:

Stack: io.buildpacks.stacks.bionic

Base Image:
  Reference: 5b753a27144e7034add3089565bd3a18a4e5790efce0c9771d2ed4bb40d6fc60
  Top Layer: sha256:2d0a8ddecbd1b537f555a120356f4dc9ff5855b2aa16b9d0edd7f9b5c3f9ade6

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

Buildpacks:
  ID                                         VERSION
  paketo-buildpacks/bellsoft-liberica        2.5.3
  paketo-buildpacks/apache-tomcat            1.1.3
  paketo-buildpacks/dist-zip                 1.3.0
  paketo-buildpacks/spring-boot              1.5.3

Processes:
  TYPE                 SHELL        COMMAND                ARGS
  web (default)        bash         catalina.sh run        
  task                 bash         catalina.sh run        
  tomcat               bash         catalina.sh run       

イメージの実行

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

docker run --rm -p 8080:8080 making/pack-servlet

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

Container memory limit unset. Configuring JVM for 1G container.
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=61686K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx474889K (Head Room: 0%, Loaded Class Count: 8477, Thread Count: 250, Total Memory: 1073741824)
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[CONTAINER] org.apache.coyote.http11.Http11NioProtocol         INFO    Initializing ProtocolHandler ["http-nio-8080"]
[CONTAINER] org.apache.catalina.startup.Catalina               INFO    Server initialization in [568] milliseconds
[CONTAINER] org.apache.catalina.core.StandardService           INFO    Starting service [Catalina]
[CONTAINER] org.apache.catalina.core.StandardEngine            INFO    Starting Servlet engine: [Apache Tomcat/9.0.34]
[CONTAINER] org.apache.catalina.startup.HostConfig             INFO    Deploying web application directory [/layers/paketo-buildpacks_apache-tomcat/catalina-base/webapps/ROOT]
[CONTAINER] org.apache.jasper.servlet.TldScanner               INFO    At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[CONTAINER] org.apache.catalina.startup.HostConfig             INFO    Deployment of web application directory [/layers/paketo-buildpacks_apache-tomcat/catalina-base/webapps/ROOT] has finished in [290] ms
[CONTAINER] org.apache.coyote.http11.Http11NioProtocol         INFO    Starting ProtocolHandler ["http-nio-8080"]
[CONTAINER] org.apache.catalina.startup.Catalina               INFO    Server startup in [355] milliseconds

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

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

$ curl localhost:8080 -w '\n'
Hello World!

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

$ docker images | grep making/pack-servlet
making/pack-servlet                  latest              562795acce7b        40 years ago        256MB

Java Buildpackの細かい設定は https://github.com/paketo-buildpacks/java を確認してください。

おわったらDocker Imageを削除します。

docker rmi making/pack-servlet