This document describes tc Server Cloud Native Buildpack integration.
This feature uses tc Server 4.1.4 or newer.
tc Server includes integration with Cloud Native Buildpacks. This integration is intended to provide simplicity of use and flexibility for advanced use cases.
This integration features the ability to detect an existing instance, a tc Runtime Instance descriptor file (when using required filename), or webapp as the source directory.
An existing VMware tc Server installation is not required to use the VMware tc Server Cloud Native Buildpack.
The tc Server CNB functionality has the ability to detect any of the following(source is the directory specified by --path or the current working directory):
If the source directory contains a tc Runtime Instance Descriptor file then tc Server will attempt to create the instance specified in the tc Runtime Instance Descriptor file. The instance.directory, runtimes.directory, and java.home properties will be ignored as these are provided by the buildpack.
The allowed filenames are as follows:
If the source directory is a tc Runtime instance it will be bundled into the container image. The tc Runtime version required by the tc Runtime Instance will be checked and tc Server will attempt to use that version. If that version can not be used because it isn't found locally or access isn't available via the tc Runtime Repository the buildpack will fail.
If the source directory contains a .war or is an exploded war (must contain WEB-INF directory) then tc Server will attempt to create an instance, deploy the detected files, and include them in the container image. The instance created will use all tc Server defaults.
This is provided for convenience and works similarly to the Paketo CNB Tomcat buildpack and is not recommended for general use.
The tc Server buildpack will create the following content:
/workspace. This is either the original instance directory or the generated instance with "original-contents" directory created as a copy of the original app dir provided to the pack command. If the tc Server buildpack creates an instance it will always be named workspace and created at /workspaceTo download the VMware tc Server Cloud Native Buildpack from Tanzu Network use your username and password for Tanzu Network when prompted
docker login registry.tanzu.vmware.com
docker image pull registry.tanzu.vmware.com/tc-server-4x-core/vmware-tcserver-buildpack:4.1.4.RELEASE
The tc Server CNB does not build a layer with a JDK/JRE. This must be provided by using additional buildpacks or a stack which will include the JDK/JRE. The examples in this document use the google.java.runtime provided by the gcr.io/buildpacks/builder builder and gcr.io/paketo-buildpacks/bellsoft-liberica provided by the gcr.io/paketo-buildpacks/builder:base builders.
Create an instance descriptor file in ~/workspace/demo-instance
mkdir -p ~/workspace/demo-instance
cat << EOF > ~/workspace/demo-instance/instance-descriptor.yaml
instance:
name: demo-instance
applications:
- https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war=ROOT.war
EOF
The following example will create a docker image named demo-instance based on the data found in ~/workspace/demo-instance using the Paketo
pack build demo-instance --path ~/workspace/demo-instance/ --builder gcr.io/paketo-buildpacks/builder:base --buildpack gcr.io/paketo-buildpacks/bellsoft-liberica,vmware-tcserver-buildpack:4.1.4.RELEASE
Alternatively the Google Builder could be used. The following example will create a docker image named demo-instance based on the data found in ~/workspace/demo-instance using the Google Builder
pack build demo-instance --path ~/workspace/demo-instance/ --buildpack google.java.runtime,registry.tanzu.vmware.com/tc-server-4x-core/vmware-tcserver-buildpack:4.1.4.RELEASE --env "GOOGLE_RUNTIME=java"
docker run -p 8080:8080 -it demo-instance
You should see output similar to the following:
Instance Name: workspace
CATALINA_BASE: /workspace
CATALINA_HOME: /layers/vmware-tcserver-buildpack/tcserver/runtimes/tomcat-9.0.36.B.RELEASE
JAVA_HOME: Unable to find JAVA_HOME in /workspace/bin/setenv.sh
tc Runtime Version: 9.0.38.B.RELEASE
tc Server Version: 4.1.4.RELEASE
tc Server Installation Directory: /layers/vmware-tcserver-buildpack/tcserver/vmware-tcserver
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
Sep 28, 2020 1:00:53 PM org.apache.catalina.startup.Catalina load
INFO: Server initialization in [901] milliseconds
Sep 28, 2020 1:00:53 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in [543] milliseconds
Note: The Unable to find JAVA_HOME in /workspace/bin/setenv.sh is expected.
Use curl to verify the instance is running and the port mapping is working correctly.
curl http://localhost:8080/
The output should be html text from the Sample "Hello, World" Application