Teamwork makes the dream work for this multi-architecture builder
There has never been a better time to start delivering Spring Boot applications to ARM64 architectures. I've been working on ARM64 buildpacks for over a year now and I want you to see how far things have come. These last few days have been leveled-up with help from Daniel Mikusa and Salman Malik, and the results are amazing.
So close
I'm excited because the builder for ARM64 is so close to the AMD64 builder supported by Paketo. To see just how close things are, we can do a simple diff
of the builders, from different architectures.
Optionally, clear cached images first
docker system prune -a --volumes -f
Inspect with ARM64
On an ARM64 device:
pack builder inspect dashaun/builder:tiny > ~/dashaun.builder.tiny.arm64
The file should look like this:
Inspecting builder: dashaun/builder:tiny
REMOTE:
Description: Tiny base image (bionic build image, distroless-like run image) with buildpacks for Java, Java Native Image and Go
Created By:
Name: Pack CLI
Version: 0.28.0+git-b10e41f.build-3729
Trusted: No
Stack:
ID: io.paketo.stacks.tiny
Lifecycle:
Version: 0.15.2
Buildpack APIs:
Deprecated: (none)
Supported: 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
Platform APIs:
Deprecated: (none)
Supported: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.10
Run Images:
index.docker.io/paketobuildpacks/run:tiny-cnb
gcr.io/paketo-buildpacks/run:tiny-cnb
Buildpacks:
ID NAME VERSION HOMEPAGE
paketo-buildpacks/apache-tomcat Paketo Buildpack for Apache Tomcat 7.9.1 https://github.com/paketo-buildpacks/apache-tomcat
paketo-buildpacks/apache-tomee Paketo Buildpack for Apache Tomee 1.4.0 https://github.com/paketo-buildpacks/apache-tomee
paketo-buildpacks/azure-application-insights Paketo Buildpack for Azure Application Insights 5.9.3 https://github.com/paketo-buildpacks/azure-application-insights
paketo-buildpacks/bellsoft-liberica Paketo Buildpack for BellSoft Liberica 9.10.1 https://github.com/paketo-buildpacks/bellsoft-liberica
paketo-buildpacks/ca-certificates Paketo Buildpack for CA Certificates 3.5.1 https://github.com/paketo-buildpacks/ca-certificates
paketo-buildpacks/clojure-tools Paketo Buildpack for Clojure Tools 2.6.1 https://github.com/paketo-buildpacks/clojure-tools
paketo-buildpacks/datadog Paketo Buildpack for Datadog 3.1.0 https://github.com/paketo-buildpacks/datadog
paketo-buildpacks/dist-zip Paketo Buildpack for DistZip 5.4.0 https://github.com/paketo-buildpacks/dist-zip
paketo-buildpacks/encrypt-at-rest Paketo Buildpack for Encrypt-at-Rest 4.3.2 https://github.com/paketo-buildpacks/encrypt-at-rest
paketo-buildpacks/environment-variables Paketo Buildpack for Environment Variables 4.4.0 https://github.com/paketo-buildpacks/environment-variables
paketo-buildpacks/executable-jar Paketo Buildpack for Executable JAR 6.5.0 https://github.com/paketo-buildpacks/executable-jar
paketo-buildpacks/git Paketo Buildpack for Git 1.0.0 https://github.com/paketo-buildpacks/git
paketo-buildpacks/go Paketo Buildpack for Go 4.0.0 https://github.com/paketo-buildpacks/go
paketo-buildpacks/go-build Paketo Buildpack for Go Build 2.0.7 https://github.com/paketo-buildpacks/go-build
paketo-buildpacks/go-dist Paketo Buildpack for Go Distribution 2.2.2 https://github.com/paketo-buildpacks/go-dist
paketo-buildpacks/go-mod-vendor Paketo Buildpack for Go Mod Vendor 1.0.6 https://github.com/paketo-buildpacks/go-mod-vendor
paketo-buildpacks/google-stackdriver Paketo Buildpack for Google Stackdriver 7.0.0 https://github.com/paketo-buildpacks/google-stackdriver
paketo-buildpacks/gradle Paketo Buildpack for Gradle 6.10.0 https://github.com/paketo-buildpacks/gradle
paketo-buildpacks/image-labels Paketo Buildpack for Image Labels 4.3.0 https://github.com/paketo-buildpacks/image-labels
paketo-buildpacks/jattach Paketo Buildpack for JAttach 1.2.0 https://github.com/paketo-buildpacks/jattach
paketo-buildpacks/java Paketo Buildpack for Java 8.1.0 https://paketo.io/docs/howto/java
paketo-buildpacks/java-memory-assistant Paketo Buildpack for Java Memory Assistant 1.2.0 https://github.com/paketo-buildpacks/java-memory-assistant
paketo-buildpacks/java-native-image Paketo Buildpack for Java Native Image 7.42.0 https://paketo.io/docs/howto/java/#build-an-app-as-a-graalvm-native-image-application
paketo-buildpacks/leiningen Paketo Buildpack for Leiningen 4.4.0 https://github.com/paketo-buildpacks/leiningen
paketo-buildpacks/liberty Paketo Buildpack for Liberty 3.1.0 https://github.com/paketo-buildpacks/liberty
paketo-buildpacks/maven Paketo Buildpack for Maven 6.11.0 https://github.com/paketo-buildpacks/maven
paketo-buildpacks/native-image Paketo Buildpack for Native Image 5.6.0 https://github.com/paketo-buildpacks/native-image
paketo-buildpacks/procfile Paketo Buildpack for Procfile 5.5.0 https://github.com/paketo-buildpacks/procfile
paketo-buildpacks/sbt Paketo Buildpack for SBT 6.9.0 https://github.com/paketo-buildpacks/sbt
paketo-buildpacks/spring-boot Paketo Buildpack for Spring Boot 5.20.0 https://github.com/paketo-buildpacks/spring-boot
paketo-buildpacks/syft Paketo Buildpack for Syft 1.23.0 https://github.com/paketo-buildpacks/syft
paketo-buildpacks/upx Paketo Buildpack for UPX 3.3.0 https://github.com/paketo-buildpacks/upx
paketo-buildpacks/watchexec Paketo Buildpack for Watchexec 2.7.0 https://github.com/paketo-buildpacks/watchexec
Detection Order:
├ Group #1:
│ └ paketo-buildpacks/java-native-image@7.42.0
│ └ Group #1:
│ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ ├ paketo-buildpacks/upx@3.3.0 (optional)
│ ├ paketo-buildpacks/bellsoft-liberica@9.10.1
│ ├ paketo-buildpacks/syft@1.23.0 (optional)
│ ├ paketo-buildpacks/leiningen@4.4.0 (optional)
│ ├ paketo-buildpacks/gradle@6.10.0 (optional)
│ ├ paketo-buildpacks/maven@6.11.0 (optional)
│ ├ paketo-buildpacks/sbt@6.9.0 (optional)
│ ├ paketo-buildpacks/executable-jar@6.5.0 (optional)
│ ├ paketo-buildpacks/spring-boot@5.20.0 (optional)
│ ├ paketo-buildpacks/native-image@5.6.0
│ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ └ paketo-buildpacks/image-labels@4.3.0 (optional)
├ Group #2:
│ └ paketo-buildpacks/java@8.1.0
│ └ Group #1:
│ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ ├ paketo-buildpacks/bellsoft-liberica@9.10.1
│ ├ paketo-buildpacks/syft@1.23.0 (optional)
│ ├ paketo-buildpacks/leiningen@4.4.0 (optional)
│ ├ paketo-buildpacks/clojure-tools@2.6.1 (optional)
│ ├ paketo-buildpacks/gradle@6.10.0 (optional)
│ ├ paketo-buildpacks/maven@6.11.0 (optional)
│ ├ paketo-buildpacks/sbt@6.9.0 (optional)
│ ├ paketo-buildpacks/watchexec@2.7.0 (optional)
│ ├ paketo-buildpacks/executable-jar@6.5.0 (optional)
│ ├ paketo-buildpacks/apache-tomcat@7.9.1 (optional)
│ ├ paketo-buildpacks/apache-tomee@1.4.0 (optional)
│ ├ paketo-buildpacks/liberty@3.1.0 (optional)
│ ├ paketo-buildpacks/dist-zip@5.4.0 (optional)
│ ├ paketo-buildpacks/spring-boot@5.20.0 (optional)
│ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ ├ paketo-buildpacks/jattach@1.2.0 (optional)
│ ├ paketo-buildpacks/azure-application-insights@5.9.3 (optional)
│ ├ paketo-buildpacks/google-stackdriver@7.0.0 (optional)
│ ├ paketo-buildpacks/datadog@3.1.0 (optional)
│ ├ paketo-buildpacks/java-memory-assistant@1.2.0 (optional)
│ ├ paketo-buildpacks/encrypt-at-rest@4.3.2 (optional)
│ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ └ paketo-buildpacks/image-labels@4.3.0 (optional)
├ Group #3:
│ ├ paketo-buildpacks/go@4.0.0
│ │ └ Group #1:
│ │ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ │ ├ paketo-buildpacks/watchexec@2.7.0 (optional)
│ │ ├ paketo-buildpacks/go-dist@2.2.2
│ │ ├ paketo-buildpacks/git@1.0.0 (optional)
│ │ ├ paketo-buildpacks/go-mod-vendor@1.0.6
│ │ ├ paketo-buildpacks/go-build@2.0.7
│ │ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ │ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ │ └ paketo-buildpacks/image-labels@4.3.0 (optional)
│ └ paketo-buildpacks/go@4.0.0
│ └ Group #2:
│ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ ├ paketo-buildpacks/watchexec@2.7.0 (optional)
│ ├ paketo-buildpacks/go-dist@2.2.2
│ ├ paketo-buildpacks/git@1.0.0 (optional)
│ ├ paketo-buildpacks/go-build@2.0.7
│ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ └ paketo-buildpacks/image-labels@4.3.0 (optional)
└ Group #4:
└ paketo-buildpacks/procfile@5.5.0
LOCAL:
(not present)
Inspect with AMD64
On an AMD64 device:
pack builder inspect dashaun/builder:tiny > ~/dashaun.builder.tiny.amd64
The file will look very similar:
Inspecting builder: dashaun/builder:tiny
REMOTE:
Description: Tiny base image (bionic build image, distroless-like run image) with buildpacks for Java, Java Native Image and Go
Created By:
Name: Pack CLI
Version: 0.28.0+git-b10e41f.build-3729
Trusted: No
Stack:
ID: io.paketo.stacks.tiny
Lifecycle:
Version: 0.15.2
Buildpack APIs:
Deprecated: (none)
Supported: 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
Platform APIs:
Deprecated: (none)
Supported: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.10
Run Images:
index.docker.io/paketobuildpacks/run:tiny-cnb
gcr.io/paketo-buildpacks/run:tiny-cnb
Buildpacks:
ID NAME VERSION HOMEPAGE
paketo-buildpacks/apache-tomcat Paketo Buildpack for Apache Tomcat 7.9.1 https://github.com/paketo-buildpacks/apache-tomcat
paketo-buildpacks/apache-tomee Paketo Buildpack for Apache Tomee 1.4.0 https://github.com/paketo-buildpacks/apache-tomee
paketo-buildpacks/azure-application-insights Paketo Buildpack for Azure Application Insights 5.9.3 https://github.com/paketo-buildpacks/azure-application-insights
paketo-buildpacks/bellsoft-liberica Paketo Buildpack for BellSoft Liberica 9.10.1 https://github.com/paketo-buildpacks/bellsoft-liberica
paketo-buildpacks/ca-certificates Paketo Buildpack for CA Certificates 3.5.1 https://github.com/paketo-buildpacks/ca-certificates
paketo-buildpacks/clojure-tools Paketo Buildpack for Clojure Tools 2.6.1 https://github.com/paketo-buildpacks/clojure-tools
paketo-buildpacks/datadog Paketo Buildpack for Datadog 3.1.0 https://github.com/paketo-buildpacks/datadog
paketo-buildpacks/dist-zip Paketo Buildpack for DistZip 5.4.0 https://github.com/paketo-buildpacks/dist-zip
paketo-buildpacks/encrypt-at-rest Paketo Buildpack for Encrypt-at-Rest 4.3.2 https://github.com/paketo-buildpacks/encrypt-at-rest
paketo-buildpacks/environment-variables Paketo Buildpack for Environment Variables 4.4.0 https://github.com/paketo-buildpacks/environment-variables
paketo-buildpacks/executable-jar Paketo Buildpack for Executable JAR 6.5.0 https://github.com/paketo-buildpacks/executable-jar
paketo-buildpacks/git Paketo Buildpack for Git 1.0.0 https://github.com/paketo-buildpacks/git
paketo-buildpacks/go Paketo Buildpack for Go 4.0.0 https://github.com/paketo-buildpacks/go
paketo-buildpacks/go-build Paketo Buildpack for Go Build 2.0.7 https://github.com/paketo-buildpacks/go-build
paketo-buildpacks/go-dist Paketo Buildpack for Go Distribution 2.2.2 https://github.com/paketo-buildpacks/go-dist
paketo-buildpacks/go-mod-vendor Paketo Buildpack for Go Mod Vendor 1.0.6 https://github.com/paketo-buildpacks/go-mod-vendor
paketo-buildpacks/google-stackdriver Paketo Buildpack for Google Stackdriver 7.0.0 https://github.com/paketo-buildpacks/google-stackdriver
paketo-buildpacks/gradle Paketo Buildpack for Gradle 6.10.0 https://github.com/paketo-buildpacks/gradle
paketo-buildpacks/image-labels Paketo Buildpack for Image Labels 4.3.0 https://github.com/paketo-buildpacks/image-labels
paketo-buildpacks/jattach Paketo Buildpack for JAttach 1.2.0 https://github.com/paketo-buildpacks/jattach
paketo-buildpacks/java Paketo Buildpack for Java 8.1.0 https://paketo.io/docs/howto/java
paketo-buildpacks/java-memory-assistant Paketo Buildpack for Java Memory Assistant 1.2.0 https://github.com/paketo-buildpacks/java-memory-assistant
paketo-buildpacks/java-native-image Paketo Buildpack for Java Native Image 7.42.0 https://paketo.io/docs/howto/java/#build-an-app-as-a-graalvm-native-image-application
paketo-buildpacks/leiningen Paketo Buildpack for Leiningen 4.4.0 https://github.com/paketo-buildpacks/leiningen
paketo-buildpacks/liberty Paketo Buildpack for Liberty 3.1.0 https://github.com/paketo-buildpacks/liberty
paketo-buildpacks/maven Paketo Buildpack for Maven 6.11.0 https://github.com/paketo-buildpacks/maven
paketo-buildpacks/native-image Paketo Buildpack for Native Image 5.6.0 https://github.com/paketo-buildpacks/native-image
paketo-buildpacks/procfile Paketo Buildpack for Procfile 5.5.0 https://github.com/paketo-buildpacks/procfile
paketo-buildpacks/sbt Paketo Buildpack for SBT 6.9.0 https://github.com/paketo-buildpacks/sbt
paketo-buildpacks/spring-boot Paketo Buildpack for Spring Boot 5.20.0 https://github.com/paketo-buildpacks/spring-boot
paketo-buildpacks/syft Paketo Buildpack for Syft 1.23.0 https://github.com/paketo-buildpacks/syft
paketo-buildpacks/upx Paketo Buildpack for UPX 3.3.0 https://github.com/paketo-buildpacks/upx
paketo-buildpacks/watchexec Paketo Buildpack for Watchexec 2.7.0 https://github.com/paketo-buildpacks/watchexec
Detection Order:
├ Group #1:
│ └ paketo-buildpacks/java-native-image@7.42.0
│ └ Group #1:
│ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ ├ paketo-buildpacks/upx@3.3.0 (optional)
│ ├ paketo-buildpacks/bellsoft-liberica@9.10.1
│ ├ paketo-buildpacks/syft@1.23.0 (optional)
│ ├ paketo-buildpacks/leiningen@4.4.0 (optional)
│ ├ paketo-buildpacks/gradle@6.10.0 (optional)
│ ├ paketo-buildpacks/maven@6.11.0 (optional)
│ ├ paketo-buildpacks/sbt@6.9.0 (optional)
│ ├ paketo-buildpacks/executable-jar@6.5.0 (optional)
│ ├ paketo-buildpacks/spring-boot@5.20.0 (optional)
│ ├ paketo-buildpacks/native-image@5.6.0
│ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ └ paketo-buildpacks/image-labels@4.3.0 (optional)
├ Group #2:
│ └ paketo-buildpacks/java@8.1.0
│ └ Group #1:
│ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ ├ paketo-buildpacks/bellsoft-liberica@9.10.1
│ ├ paketo-buildpacks/syft@1.23.0 (optional)
│ ├ paketo-buildpacks/leiningen@4.4.0 (optional)
│ ├ paketo-buildpacks/clojure-tools@2.6.1 (optional)
│ ├ paketo-buildpacks/gradle@6.10.0 (optional)
│ ├ paketo-buildpacks/maven@6.11.0 (optional)
│ ├ paketo-buildpacks/sbt@6.9.0 (optional)
│ ├ paketo-buildpacks/watchexec@2.7.0 (optional)
│ ├ paketo-buildpacks/executable-jar@6.5.0 (optional)
│ ├ paketo-buildpacks/apache-tomcat@7.9.1 (optional)
│ ├ paketo-buildpacks/apache-tomee@1.4.0 (optional)
│ ├ paketo-buildpacks/liberty@3.1.0 (optional)
│ ├ paketo-buildpacks/dist-zip@5.4.0 (optional)
│ ├ paketo-buildpacks/spring-boot@5.20.0 (optional)
│ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ ├ paketo-buildpacks/jattach@1.2.0 (optional)
│ ├ paketo-buildpacks/azure-application-insights@5.9.3 (optional)
│ ├ paketo-buildpacks/google-stackdriver@7.0.0 (optional)
│ ├ paketo-buildpacks/datadog@3.1.0 (optional)
│ ├ paketo-buildpacks/java-memory-assistant@1.2.0 (optional)
│ ├ paketo-buildpacks/encrypt-at-rest@4.3.2 (optional)
│ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ └ paketo-buildpacks/image-labels@4.3.0 (optional)
├ Group #3:
│ ├ paketo-buildpacks/go@4.0.0
│ │ └ Group #1:
│ │ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ │ ├ paketo-buildpacks/watchexec@2.7.0 (optional)
│ │ ├ paketo-buildpacks/go-dist@2.2.2
│ │ ├ paketo-buildpacks/git@1.0.0 (optional)
│ │ ├ paketo-buildpacks/go-mod-vendor@1.0.6
│ │ ├ paketo-buildpacks/go-build@2.0.7
│ │ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ │ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ │ └ paketo-buildpacks/image-labels@4.3.0 (optional)
│ └ paketo-buildpacks/go@4.0.0
│ └ Group #2:
│ ├ paketo-buildpacks/ca-certificates@3.5.1 (optional)
│ ├ paketo-buildpacks/watchexec@2.7.0 (optional)
│ ├ paketo-buildpacks/go-dist@2.2.2
│ ├ paketo-buildpacks/git@1.0.0 (optional)
│ ├ paketo-buildpacks/go-build@2.0.7
│ ├ paketo-buildpacks/procfile@5.5.0 (optional)
│ ├ paketo-buildpacks/environment-variables@4.4.0 (optional)
│ └ paketo-buildpacks/image-labels@4.3.0 (optional)
└ Group #4:
└ paketo-buildpacks/procfile@5.5.0
LOCAL:
(not present)
Now, take a look at the diff
between those two files:
diff dashaun.builder.tiny.arm64 dashaun.builder.tiny.amd64
As I'm writing this, the diff
looks like this:
text
< Inspecting builder: 'dashaun/builder:tiny'
Top comments (0)