SlideShare a Scribd company logo
1 of 11
Download to read offline
FAT JAR SMACKDOWN
Spring Boot, Eclipse Vert.x, WildFly
Swarm, Dropwizard
Fat JARs
• Easily Portable, easily runnable (esp. in IDEs)
• Dependencies resolved at build time (not in production)
• Everyone supports it
• Dropwizard was first (March 2011)
• Everything in one JAR
• Everything in one container layer
• Fat JAR is rebuilt for single line change
product.hubspot.com/blog/the-fault-in-our-jars-why-we-stopped-building-fat-jars
~ % docker history 7ac5d7400c9e
IMAGE CREATED CREATED BY SIZE
7ac5d7400c9e 6 weeks ago /bin/sh -c tar -C /tmp -xf - && /usr/local... 209 MB
2d35763bda38 2 months ago /bin/sh -c #(nop) CMD ["/usr/local/s2i/run"] 0 B
<missing> 2 months ago /bin/sh -c mkdir -p /deployments/data 7 B
<missing> 2 months ago /bin/sh -c #(nop) COPY file:093cf59865b7eb... 421 B
<missing> 2 months ago /bin/sh -c mkdir -p /opt/jboss/.m2 7 B
<missing> 2 months ago /bin/sh -c #(nop) USER [1000] 0 B
<missing> 2 months ago /bin/sh -c mkdir -p /deployments/data && ... 7 B
<missing> 2 months ago /bin/sh -c chmod 755 /opt/run-java/run-env.sh 96 B
<missing> 2 months ago /bin/sh -c #(nop) COPY file:41c68bae60a2fc... 89 B
<missing> 2 months ago /bin/sh -c chmod 755 /opt/run-java/run-jav... 11.2 kB
<missing> 2 months ago /bin/sh -c #(nop) COPY multi:f0215f3bf07a5... 11.2 kB
<missing> 2 months ago /bin/sh -c #(nop) ADD file:a997b3875f55a65... 7.78 kB
<missing> 2 months ago /bin/sh -c chmod 755 /usr/local/s2i/* 7.37 kB
<missing> 2 months ago /bin/sh -c #(nop) COPY dir:d2bc92464c815ef... 7.36 kB
<missing> 2 months ago /bin/sh -c #(nop) EXPOSE 8778/tcp 0 B
<missing> 2 months ago /bin/sh -c chmod 444 /opt/jolokia/jolokia.... 448 kB
<missing> 2 months ago /bin/sh -c #(nop) ADD file:7428506ba578dc4... 2.78 kB
<missing> 2 months ago /bin/sh -c mkdir -p /opt/jolokia/etc && c... 445 kB
<missing> 2 months ago /bin/sh -c curl https://archive.apache.org... 9.52 MB
<missing> 2 months ago /bin/sh -c usermod -g root -G jboss jboss 3.36 kB
<missing> 2 months ago /bin/sh -c echo securerandom.source=file:/... 32.8 kB
<missing> 2 months ago /bin/sh -c #(nop) USER [root] 0 B
<missing> 2 months ago /bin/sh -c #(nop) LABEL io.fabric8.s2i.ver... 0 B
<missing> 2 months ago /bin/sh -c #(nop) ENV JOLOKIA_VERSION=1.3.... 0 B
<missing> 2 months ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/... 0 B
<missing> 2 months ago /bin/sh -c #(nop) USER [jboss] 0 B
<missing> 2 months ago /bin/sh -c yum -y install java-1.8.0-openj... 200 MB
<missing> 2 months ago /bin/sh -c #(nop) USER [root] 0 B
<missing> 2 months ago /bin/sh -c #(nop) MAINTAINER Marek Goldma... 0 B
<missing> 2 months ago /bin/sh -c #(nop) USER [jboss] 0 B
<missing> 2 months ago /bin/sh -c #(nop) WORKDIR /opt/jboss 0 B
<missing> 2 months ago /bin/sh -c groupadd -r jboss -g 1000 && us... 296 kB
<missing> 2 months ago /bin/sh -c yum update -y && yum -y install... 27.6 MB
<missing> 2 months ago /bin/sh -c #(nop) MAINTAINER Marek Goldma... 0 B
<missing> 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 2 months ago /bin/sh -c #(nop) LABEL name=CentOS Base ... 0 B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:d22a9c627d1d1f3... 193 MB
OS
Java
App Server + App
Build scripts
Typical Java EE
Container Layers
IMAGE CREATED CREATED BY SIZE
COMMENT
470e32ddc492 7 seconds ago /bin/sh -c #(nop) ADD file:8a5315547de4c8d... 14.4 MB
a5bfb986fd7f 19 seconds ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0 B
dc85e81854d1 19 seconds ago /bin/sh -c #(nop) ENTRYPOINT ["sh" "-c" "... 0 B
661b82f1b4f6 2 days ago /bin/sh -c #(nop) VOLUME [/tmp] 0 B
a8bd10541772 2 weeks ago /bin/sh -c set -x && apk add --no-cache ... 97.1 MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_ALPINE_VERSION... 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u131 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbi... 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/... 0 B
<missing> 2 weeks ago /bin/sh -c { echo '#!/bin/sh'; echo 's... 87 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:4583e12bf5caec4... 3.97 MB
OS
App (Fat JAR)
Java
Spring Boot “Hello World”
Thin JAR Container Layers
IMAGE CREATED CREATED BY SIZE
2c2a26c16ba3 9 seconds ago /bin/sh -c #(nop) ADD file:267565476904261... 2.27 kB
37cdd8f0be3e 10 seconds ago /bin/sh -c #(nop) ADD file:3696ab070f867a9... 46.3 MB
da2c317b1fad 35 hours ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0 B
5827f39ca476 35 hours ago /bin/sh -c #(nop) ENTRYPOINT ["sh" "-c" "... 0 B
661b82f1b4f6 3 days ago /bin/sh -c #(nop) VOLUME [/tmp] 0 B
a8bd10541772 2 weeks ago /bin/sh -c set -x && apk add --no-cache ... 97.1 MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_ALPINE_VERSION... 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u131 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbi... 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/... 0 B
<missing> 2 weeks ago /bin/sh -c { echo '#!/bin/sh'; echo 's... 87 B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:4583e12bf5caec4... 3.97 MB
OS
WF Swarm
(Hollow JAR)
Java
Wildfly Swarm “Hello World”
Skinny JAR/WAR Container Layers
App (Skinny WAR)
Fat JAR Fight Club
(Hello World + Joda
Time lib)
45 MB
17 MB
15 MB
4 MB
Fat, Thin, Skinny, Hollow
• Thin
• App + Direct Dependencies (ex:
traditional Java EE .WAR files)
• Skinny
• App only, dependencies satisfied
externally
• Must be “deployed” to hollow app
• Hollow
• App runtime only, contains app
dependencies
developers.redhat.com/blog/2017/08/24/the-skinny-on-fat-thin-hollow-and-uber/
Fat, Thin, Skinny, Hollow support
Fat Thin Skinny/Hollow
Spring Boot ✔ ✔ (via SB Thin Launch)
✔ (via docker)
WildFly Swarm ✔ ✔ ✔ (via fractions)
Eclipse Vert.x ✔ ✔ (via maven)
✔ (via docker)
Dropwizard ✔ ✔ (via maven)
FAT JAR SMACKDOWN
Demo
● Fat Apps
○ Works well in many cases
○ Consider size of resulting app & (re-)deployment
speed esp. w/containers
● Thin
○ Useful for large dependency sets at scale
● Skinny/Hollow
○ Highly efficient packaging
○ Additional initial complexity
Microservices Packaging Recommendations

More Related Content

What's hot

Containers from Scratch: what are they made from?
Containers from Scratch: what are they made from?Containers from Scratch: what are they made from?
Containers from Scratch: what are they made from?Giri Kuncoro
 
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with SlingRapid JCR Applications Development with Sling
Rapid JCR Applications Development with SlingFelix Meschberger
 
Repoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initializationRepoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initializationBertrand Delacretaz
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Herokuronnywang_tw
 
More than Applications: (Ab)using Docker to Improve the Portability of Everyt...
More than Applications: (Ab)using Docker to Improve the Portability of Everyt...More than Applications: (Ab)using Docker to Improve the Portability of Everyt...
More than Applications: (Ab)using Docker to Improve the Portability of Everyt...Dexter Horthy
 
Serverless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètesServerless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètesBertrand Delacretaz
 
REST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU SorocabaREST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU SorocabaLucas Renan
 
Qt native built for raspberry zero
Qt native built for  raspberry zeroQt native built for  raspberry zero
Qt native built for raspberry zeroSoheilSabzevari2
 
GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?Bertrand Delacretaz
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerOrtus Solutions, Corp
 
Making environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeMaking environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeSoshi Nemoto
 
Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.Workhorse Computing
 
Building an Apache Sling Rendering Farm
Building an Apache Sling Rendering FarmBuilding an Apache Sling Rendering Farm
Building an Apache Sling Rendering FarmBertrand Delacretaz
 
Frontend JS workflow - Gulp 4 and the like
Frontend JS workflow - Gulp 4 and the likeFrontend JS workflow - Gulp 4 and the like
Frontend JS workflow - Gulp 4 and the likeDamien Seguin
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby TeamArto Artnik
 
Rush, a shell that will yield to you
Rush, a shell that will yield to youRush, a shell that will yield to you
Rush, a shell that will yield to youguestdd9d06
 

What's hot (19)

Containers from Scratch: what are they made from?
Containers from Scratch: what are they made from?Containers from Scratch: what are they made from?
Containers from Scratch: what are they made from?
 
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with SlingRapid JCR Applications Development with Sling
Rapid JCR Applications Development with Sling
 
Repoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initializationRepoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initialization
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
 
More than Applications: (Ab)using Docker to Improve the Portability of Everyt...
More than Applications: (Ab)using Docker to Improve the Portability of Everyt...More than Applications: (Ab)using Docker to Improve the Portability of Everyt...
More than Applications: (Ab)using Docker to Improve the Portability of Everyt...
 
Serverless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètesServerless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètes
 
REST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU SorocabaREST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU Sorocaba
 
Qt native built for raspberry zero
Qt native built for  raspberry zeroQt native built for  raspberry zero
Qt native built for raspberry zero
 
GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and docker
 
Making environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeMaking environment for_infrastructure_as_code
Making environment for_infrastructure_as_code
 
Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.
 
Building an Apache Sling Rendering Farm
Building an Apache Sling Rendering FarmBuilding an Apache Sling Rendering Farm
Building an Apache Sling Rendering Farm
 
Frontend JS workflow - Gulp 4 and the like
Frontend JS workflow - Gulp 4 and the likeFrontend JS workflow - Gulp 4 and the like
Frontend JS workflow - Gulp 4 and the like
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Rush, a shell that will yield to you
Rush, a shell that will yield to youRush, a shell that will yield to you
Rush, a shell that will yield to you
 
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
 
Docker in practice
Docker in practiceDocker in practice
Docker in practice
 
Svn Subversion
Svn SubversionSvn Subversion
Svn Subversion
 

Similar to Fat Jar Smackdown

Scaling Development Environments with Docker
Scaling Development Environments with DockerScaling Development Environments with Docker
Scaling Development Environments with DockerDocker, Inc.
 
Using Nix and Docker as automated deployment solutions
Using Nix and Docker as automated deployment solutionsUsing Nix and Docker as automated deployment solutions
Using Nix and Docker as automated deployment solutionsSander van der Burg
 
Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Nicola Paolucci
 
AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)
AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)
AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)Amazon Web Services
 
Docker command
Docker commandDocker command
Docker commandEric Ahn
 
AtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingAtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingSteve Smith
 
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...Eric Smalling
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Ontico
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdockerJaehwa Park
 
Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)Brendan Gregg
 
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐KAI CHU CHUNG
 
DeveloperWeek 2015: A Practical Introduction to Docker
DeveloperWeek 2015: A Practical Introduction to DockerDeveloperWeek 2015: A Practical Introduction to Docker
DeveloperWeek 2015: A Practical Introduction to DockerSteve Smith
 
Using Git as your VCS with Bioconductor
Using Git as your VCS with BioconductorUsing Git as your VCS with Bioconductor
Using Git as your VCS with Bioconductortimyates
 
Systems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting StartedSystems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting StartedBrendan Gregg
 
Optimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerOptimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerGraham Charters
 
Shipping python project by docker
Shipping python project by dockerShipping python project by docker
Shipping python project by dockerWei-Ting Kuo
 
Rust & Python : Python WA October meetup
Rust & Python : Python WA October meetupRust & Python : Python WA October meetup
Rust & Python : Python WA October meetupJohn Vandenberg
 
DCEU 18: Tips and Tricks of the Docker Captains
DCEU 18: Tips and Tricks of the Docker CaptainsDCEU 18: Tips and Tricks of the Docker Captains
DCEU 18: Tips and Tricks of the Docker CaptainsDocker, Inc.
 

Similar to Fat Jar Smackdown (20)

Docker as an every day work tool
Docker as an every day work toolDocker as an every day work tool
Docker as an every day work tool
 
Scaling Development Environments with Docker
Scaling Development Environments with DockerScaling Development Environments with Docker
Scaling Development Environments with Docker
 
Using Nix and Docker as automated deployment solutions
Using Nix and Docker as automated deployment solutionsUsing Nix and Docker as automated deployment solutions
Using Nix and Docker as automated deployment solutions
 
Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)
 
AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)
AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)
AWS re:Invent 2016: Amazon ECR Deep Dive on Image Optimization (CON401)
 
Docker command
Docker commandDocker command
Docker command
 
AtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingAtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration training
 
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
Backups
BackupsBackups
Backups
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdocker
 
Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)
 
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐Coscup x ruby conf tw 2021  google cloud buildpacks 剖析與實踐
Coscup x ruby conf tw 2021 google cloud buildpacks 剖析與實踐
 
DeveloperWeek 2015: A Practical Introduction to Docker
DeveloperWeek 2015: A Practical Introduction to DockerDeveloperWeek 2015: A Practical Introduction to Docker
DeveloperWeek 2015: A Practical Introduction to Docker
 
Using Git as your VCS with Bioconductor
Using Git as your VCS with BioconductorUsing Git as your VCS with Bioconductor
Using Git as your VCS with Bioconductor
 
Systems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting StartedSystems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting Started
 
Optimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerOptimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for Docker
 
Shipping python project by docker
Shipping python project by dockerShipping python project by docker
Shipping python project by docker
 
Rust & Python : Python WA October meetup
Rust & Python : Python WA October meetupRust & Python : Python WA October meetup
Rust & Python : Python WA October meetup
 
DCEU 18: Tips and Tricks of the Docker Captains
DCEU 18: Tips and Tricks of the Docker CaptainsDCEU 18: Tips and Tricks of the Docker Captains
DCEU 18: Tips and Tricks of the Docker Captains
 

More from Red Hat Developers

DevNation Tech Talk: Getting GitOps
DevNation Tech Talk: Getting GitOpsDevNation Tech Talk: Getting GitOps
DevNation Tech Talk: Getting GitOpsRed Hat Developers
 
Exploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesExploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesRed Hat Developers
 
GitHub Makeover | DevNation Tech Talk
GitHub Makeover | DevNation Tech TalkGitHub Makeover | DevNation Tech Talk
GitHub Makeover | DevNation Tech TalkRed Hat Developers
 
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Quinoa: A modern Quarkus UI with no hassles | DevNation tech TalkQuinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Quinoa: A modern Quarkus UI with no hassles | DevNation tech TalkRed Hat Developers
 
Extra micrometer practices with Quarkus | DevNation Tech Talk
Extra micrometer practices with Quarkus | DevNation Tech TalkExtra micrometer practices with Quarkus | DevNation Tech Talk
Extra micrometer practices with Quarkus | DevNation Tech TalkRed Hat Developers
 
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...Red Hat Developers
 
Integrating Loom in Quarkus | DevNation Tech Talk
Integrating Loom in Quarkus | DevNation Tech TalkIntegrating Loom in Quarkus | DevNation Tech Talk
Integrating Loom in Quarkus | DevNation Tech TalkRed Hat Developers
 
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...Red Hat Developers
 
Containers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech TalkContainers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech TalkRed Hat Developers
 
Distributed deployment of microservices across multiple OpenShift clusters | ...
Distributed deployment of microservices across multiple OpenShift clusters | ...Distributed deployment of microservices across multiple OpenShift clusters | ...
Distributed deployment of microservices across multiple OpenShift clusters | ...Red Hat Developers
 
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...Red Hat Developers
 
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...Red Hat Developers
 
11 CLI tools every developer should know | DevNation Tech Talk
11 CLI tools every developer should know | DevNation Tech Talk11 CLI tools every developer should know | DevNation Tech Talk
11 CLI tools every developer should know | DevNation Tech TalkRed Hat Developers
 
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkA Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkRed Hat Developers
 
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
GitHub Actions and OpenShift: ​​Supercharging your software development loops...GitHub Actions and OpenShift: ​​Supercharging your software development loops...
GitHub Actions and OpenShift: ​​Supercharging your software development loops...Red Hat Developers
 
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
To the moon and beyond with Java 17 APIs! | DevNation Tech TalkTo the moon and beyond with Java 17 APIs! | DevNation Tech Talk
To the moon and beyond with Java 17 APIs! | DevNation Tech TalkRed Hat Developers
 
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...Red Hat Developers
 
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...Red Hat Developers
 
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Kubernetes configuration and security policies with KubeLinter | DevNation Te...Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Kubernetes configuration and security policies with KubeLinter | DevNation Te...Red Hat Developers
 
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Level-up your gaming telemetry using Kafka Streams | DevNation Tech TalkLevel-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Level-up your gaming telemetry using Kafka Streams | DevNation Tech TalkRed Hat Developers
 

More from Red Hat Developers (20)

DevNation Tech Talk: Getting GitOps
DevNation Tech Talk: Getting GitOpsDevNation Tech Talk: Getting GitOps
DevNation Tech Talk: Getting GitOps
 
Exploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesExploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on Kubernetes
 
GitHub Makeover | DevNation Tech Talk
GitHub Makeover | DevNation Tech TalkGitHub Makeover | DevNation Tech Talk
GitHub Makeover | DevNation Tech Talk
 
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Quinoa: A modern Quarkus UI with no hassles | DevNation tech TalkQuinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
 
Extra micrometer practices with Quarkus | DevNation Tech Talk
Extra micrometer practices with Quarkus | DevNation Tech TalkExtra micrometer practices with Quarkus | DevNation Tech Talk
Extra micrometer practices with Quarkus | DevNation Tech Talk
 
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
 
Integrating Loom in Quarkus | DevNation Tech Talk
Integrating Loom in Quarkus | DevNation Tech TalkIntegrating Loom in Quarkus | DevNation Tech Talk
Integrating Loom in Quarkus | DevNation Tech Talk
 
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
 
Containers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech TalkContainers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech Talk
 
Distributed deployment of microservices across multiple OpenShift clusters | ...
Distributed deployment of microservices across multiple OpenShift clusters | ...Distributed deployment of microservices across multiple OpenShift clusters | ...
Distributed deployment of microservices across multiple OpenShift clusters | ...
 
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
 
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
 
11 CLI tools every developer should know | DevNation Tech Talk
11 CLI tools every developer should know | DevNation Tech Talk11 CLI tools every developer should know | DevNation Tech Talk
11 CLI tools every developer should know | DevNation Tech Talk
 
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkA Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
 
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
GitHub Actions and OpenShift: ​​Supercharging your software development loops...GitHub Actions and OpenShift: ​​Supercharging your software development loops...
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
 
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
To the moon and beyond with Java 17 APIs! | DevNation Tech TalkTo the moon and beyond with Java 17 APIs! | DevNation Tech Talk
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
 
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
 
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
 
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Kubernetes configuration and security policies with KubeLinter | DevNation Te...Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
 
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Level-up your gaming telemetry using Kafka Streams | DevNation Tech TalkLevel-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
 

Recently uploaded

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 

Recently uploaded (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 

Fat Jar Smackdown

  • 1. FAT JAR SMACKDOWN Spring Boot, Eclipse Vert.x, WildFly Swarm, Dropwizard
  • 2. Fat JARs • Easily Portable, easily runnable (esp. in IDEs) • Dependencies resolved at build time (not in production) • Everyone supports it • Dropwizard was first (March 2011) • Everything in one JAR • Everything in one container layer • Fat JAR is rebuilt for single line change
  • 4. ~ % docker history 7ac5d7400c9e IMAGE CREATED CREATED BY SIZE 7ac5d7400c9e 6 weeks ago /bin/sh -c tar -C /tmp -xf - && /usr/local... 209 MB 2d35763bda38 2 months ago /bin/sh -c #(nop) CMD ["/usr/local/s2i/run"] 0 B <missing> 2 months ago /bin/sh -c mkdir -p /deployments/data 7 B <missing> 2 months ago /bin/sh -c #(nop) COPY file:093cf59865b7eb... 421 B <missing> 2 months ago /bin/sh -c mkdir -p /opt/jboss/.m2 7 B <missing> 2 months ago /bin/sh -c #(nop) USER [1000] 0 B <missing> 2 months ago /bin/sh -c mkdir -p /deployments/data && ... 7 B <missing> 2 months ago /bin/sh -c chmod 755 /opt/run-java/run-env.sh 96 B <missing> 2 months ago /bin/sh -c #(nop) COPY file:41c68bae60a2fc... 89 B <missing> 2 months ago /bin/sh -c chmod 755 /opt/run-java/run-jav... 11.2 kB <missing> 2 months ago /bin/sh -c #(nop) COPY multi:f0215f3bf07a5... 11.2 kB <missing> 2 months ago /bin/sh -c #(nop) ADD file:a997b3875f55a65... 7.78 kB <missing> 2 months ago /bin/sh -c chmod 755 /usr/local/s2i/* 7.37 kB <missing> 2 months ago /bin/sh -c #(nop) COPY dir:d2bc92464c815ef... 7.36 kB <missing> 2 months ago /bin/sh -c #(nop) EXPOSE 8778/tcp 0 B <missing> 2 months ago /bin/sh -c chmod 444 /opt/jolokia/jolokia.... 448 kB <missing> 2 months ago /bin/sh -c #(nop) ADD file:7428506ba578dc4... 2.78 kB <missing> 2 months ago /bin/sh -c mkdir -p /opt/jolokia/etc && c... 445 kB <missing> 2 months ago /bin/sh -c curl https://archive.apache.org... 9.52 MB <missing> 2 months ago /bin/sh -c usermod -g root -G jboss jboss 3.36 kB <missing> 2 months ago /bin/sh -c echo securerandom.source=file:/... 32.8 kB <missing> 2 months ago /bin/sh -c #(nop) USER [root] 0 B <missing> 2 months ago /bin/sh -c #(nop) LABEL io.fabric8.s2i.ver... 0 B <missing> 2 months ago /bin/sh -c #(nop) ENV JOLOKIA_VERSION=1.3.... 0 B <missing> 2 months ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/... 0 B <missing> 2 months ago /bin/sh -c #(nop) USER [jboss] 0 B <missing> 2 months ago /bin/sh -c yum -y install java-1.8.0-openj... 200 MB <missing> 2 months ago /bin/sh -c #(nop) USER [root] 0 B <missing> 2 months ago /bin/sh -c #(nop) MAINTAINER Marek Goldma... 0 B <missing> 2 months ago /bin/sh -c #(nop) USER [jboss] 0 B <missing> 2 months ago /bin/sh -c #(nop) WORKDIR /opt/jboss 0 B <missing> 2 months ago /bin/sh -c groupadd -r jboss -g 1000 && us... 296 kB <missing> 2 months ago /bin/sh -c yum update -y && yum -y install... 27.6 MB <missing> 2 months ago /bin/sh -c #(nop) MAINTAINER Marek Goldma... 0 B <missing> 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 2 months ago /bin/sh -c #(nop) LABEL name=CentOS Base ... 0 B <missing> 2 months ago /bin/sh -c #(nop) ADD file:d22a9c627d1d1f3... 193 MB OS Java App Server + App Build scripts Typical Java EE Container Layers
  • 5. IMAGE CREATED CREATED BY SIZE COMMENT 470e32ddc492 7 seconds ago /bin/sh -c #(nop) ADD file:8a5315547de4c8d... 14.4 MB a5bfb986fd7f 19 seconds ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0 B dc85e81854d1 19 seconds ago /bin/sh -c #(nop) ENTRYPOINT ["sh" "-c" "... 0 B 661b82f1b4f6 2 days ago /bin/sh -c #(nop) VOLUME [/tmp] 0 B a8bd10541772 2 weeks ago /bin/sh -c set -x && apk add --no-cache ... 97.1 MB <missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_ALPINE_VERSION... 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u131 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbi... 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/... 0 B <missing> 2 weeks ago /bin/sh -c { echo '#!/bin/sh'; echo 's... 87 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0 B <missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:4583e12bf5caec4... 3.97 MB OS App (Fat JAR) Java Spring Boot “Hello World” Thin JAR Container Layers
  • 6. IMAGE CREATED CREATED BY SIZE 2c2a26c16ba3 9 seconds ago /bin/sh -c #(nop) ADD file:267565476904261... 2.27 kB 37cdd8f0be3e 10 seconds ago /bin/sh -c #(nop) ADD file:3696ab070f867a9... 46.3 MB da2c317b1fad 35 hours ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0 B 5827f39ca476 35 hours ago /bin/sh -c #(nop) ENTRYPOINT ["sh" "-c" "... 0 B 661b82f1b4f6 3 days ago /bin/sh -c #(nop) VOLUME [/tmp] 0 B a8bd10541772 2 weeks ago /bin/sh -c set -x && apk add --no-cache ... 97.1 MB <missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_ALPINE_VERSION... 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u131 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbi... 0 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/... 0 B <missing> 2 weeks ago /bin/sh -c { echo '#!/bin/sh'; echo 's... 87 B <missing> 2 weeks ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0 B <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0 B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:4583e12bf5caec4... 3.97 MB OS WF Swarm (Hollow JAR) Java Wildfly Swarm “Hello World” Skinny JAR/WAR Container Layers App (Skinny WAR)
  • 7. Fat JAR Fight Club (Hello World + Joda Time lib) 45 MB 17 MB 15 MB 4 MB
  • 8. Fat, Thin, Skinny, Hollow • Thin • App + Direct Dependencies (ex: traditional Java EE .WAR files) • Skinny • App only, dependencies satisfied externally • Must be “deployed” to hollow app • Hollow • App runtime only, contains app dependencies developers.redhat.com/blog/2017/08/24/the-skinny-on-fat-thin-hollow-and-uber/
  • 9. Fat, Thin, Skinny, Hollow support Fat Thin Skinny/Hollow Spring Boot ✔ ✔ (via SB Thin Launch) ✔ (via docker) WildFly Swarm ✔ ✔ ✔ (via fractions) Eclipse Vert.x ✔ ✔ (via maven) ✔ (via docker) Dropwizard ✔ ✔ (via maven)
  • 11. ● Fat Apps ○ Works well in many cases ○ Consider size of resulting app & (re-)deployment speed esp. w/containers ● Thin ○ Useful for large dependency sets at scale ● Skinny/Hollow ○ Highly efficient packaging ○ Additional initial complexity Microservices Packaging Recommendations