SlideShare a Scribd company logo
1 of 13
Download to read offline
FAT JAR SMACKDOWN
Spring Boot, Eclipse Vert.x, WildFly
Swarm, Dropwizard
James Falkner - Red Hat - @schtool
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 (!)
Fat JAR Fight Club
(Hello World + Joda
Time lib)
45 MB
14 MB 14 MB
7 MB
245 MB 214 MB 214 MB 207 MB
200 MB
Code+Deps
200 MB
Code+Deps
200 MB
Code+Deps
200 MB
Code+Deps
product.hubspot.com/blog/the-fault-in-our-jars-why-we-stopped-building-fat-jars
https://youtu.be/LwimkQQDhio
~ % 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 (~200M)
Java (~200M)
App Server + App (200M++)
Build scripts (negligible)
Trad. 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 (4M)
App (14M ++)
Java (100M)
Spring Boot “Hello World”
Fat JAR in a Container
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 (4M)
WF Swarm
(Hollow JAR)
(46M)
Java (100M)
Wildfly Swarm “Hello World”
Skinny JAR/WAR in a Container
App (Skinny WAR)
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 JAR SMACKDOWN
github.com/jamesfalkner/wfswarm-packaging-demo
Demo
Fat, Thin, Skinny, Hollow support
Fat Thin Skinny/Hollow
Spring Boot ✔ ✔ (via SB Thin Launcher)
✔ (via Docker Prep Plugin)
WildFly Swarm ✔ ✔ ✔ (via fractions)
Eclipse Vert.x ✔ ✔ (via maven)
✔ (via Capsule?)
Dropwizard ✔ ✔ (via maven)?
✔ (via Capsule?)
● Fat JAR
○ Works well in many cases, dev-friendly
○ 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

Docker Warsaw Meetup 12/2017 - DockerCon 2017 Recap
Docker Warsaw Meetup 12/2017 - DockerCon 2017 RecapDocker Warsaw Meetup 12/2017 - DockerCon 2017 Recap
Docker Warsaw Meetup 12/2017 - DockerCon 2017 RecapKrzysztof Sobczak
 
DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains  DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains Docker, Inc.
 
Ruby microservices with Docker - Sergii Koba
Ruby microservices with Docker -  Sergii KobaRuby microservices with Docker -  Sergii Koba
Ruby microservices with Docker - Sergii KobaRuby Meditation
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDocker, Inc.
 
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境謝 宗穎
 
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
 
[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless modeAkihiro Suda
 
Docker 101 @KACST Saudi HPC 2016
Docker 101  @KACST Saudi HPC 2016Docker 101  @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016Walid Shaari
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMartin Etmajer
 
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik DornJDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik DornPROIDEA
 
Intro- Docker Native for OSX and Windows
Intro- Docker Native for OSX and WindowsIntro- Docker Native for OSX and Windows
Intro- Docker Native for OSX and WindowsThomas Chacko
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Bo-Yi Wu
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionBen Hall
 
Hide your development environment and application in a container
Hide your development environment and application in a containerHide your development environment and application in a container
Hide your development environment and application in a containerJohan Janssen
 
Breaking the RpiDocker challenge
Breaking the RpiDocker challenge Breaking the RpiDocker challenge
Breaking the RpiDocker challenge Nicolas De Loof
 
Immutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkitImmutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkit어형 이
 

What's hot (20)

Docker Warsaw Meetup 12/2017 - DockerCon 2017 Recap
Docker Warsaw Meetup 12/2017 - DockerCon 2017 RecapDocker Warsaw Meetup 12/2017 - DockerCon 2017 Recap
Docker Warsaw Meetup 12/2017 - DockerCon 2017 Recap
 
DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains  DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains
 
Ruby microservices with Docker - Sergii Koba
Ruby microservices with Docker -  Sergii KobaRuby microservices with Docker -  Sergii Koba
Ruby microservices with Docker - Sergii Koba
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
 
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
 
Docker in practice
Docker in practiceDocker in practice
Docker in practice
 
Docker
DockerDocker
Docker
 
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)
 
[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode
 
Docker perl build
Docker perl buildDocker perl build
Docker perl build
 
Docker 101 @KACST Saudi HPC 2016
Docker 101  @KACST Saudi HPC 2016Docker 101  @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on Kubernetes
 
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik DornJDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
 
Intro- Docker Native for OSX and Windows
Intro- Docker Native for OSX and WindowsIntro- Docker Native for OSX and Windows
Intro- Docker Native for OSX and Windows
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
 
Hide your development environment and application in a container
Hide your development environment and application in a containerHide your development environment and application in a container
Hide your development environment and application in a container
 
Breaking the RpiDocker challenge
Breaking the RpiDocker challenge Breaking the RpiDocker challenge
Breaking the RpiDocker challenge
 
Immutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkitImmutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkit
 
Why Go Lang?
Why Go Lang?Why Go Lang?
Why Go Lang?
 

Similar to Rh developers fat jar smackdown

Docker Demo @ IuK Seminar
Docker Demo @ IuK SeminarDocker Demo @ IuK Seminar
Docker Demo @ IuK SeminarMartin Scharm
 
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
 
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
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdockerJaehwa Park
 
AtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingAtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingSteve Smith
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Ontico
 
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
 
Shipping python project by docker
Shipping python project by dockerShipping python project by docker
Shipping python project by dockerWei-Ting Kuo
 
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
 
Optimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerOptimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerGraham Charters
 
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
 
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
 
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
 
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
 
Breaking bad habits with GitLab CI
Breaking bad habits with GitLab CIBreaking bad habits with GitLab CI
Breaking bad habits with GitLab CIIvan Nemytchenko
 
Develop QNAP NAS App by Docker
Develop QNAP NAS App by DockerDevelop QNAP NAS App by Docker
Develop QNAP NAS App by DockerTerry Chen
 

Similar to Rh developers fat jar smackdown (20)

Fat Jar Smackdown
Fat Jar SmackdownFat Jar Smackdown
Fat Jar Smackdown
 
Docker Demo @ IuK Seminar
Docker Demo @ IuK SeminarDocker Demo @ IuK Seminar
Docker Demo @ IuK Seminar
 
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
 
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
 
Docker 활용법: dumpdocker
Docker 활용법: dumpdockerDocker 활용법: dumpdocker
Docker 활용법: dumpdocker
 
Backups
BackupsBackups
Backups
 
AtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration trainingAtlasCamp 2015 Docker continuous integration training
AtlasCamp 2015 Docker continuous integration training
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
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...
 
Shipping python project by docker
Shipping python project by dockerShipping python project by docker
Shipping python project by docker
 
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
 
Optimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerOptimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for Docker
 
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)
 
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
 
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 剖析與實踐
 
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
 
Breaking bad habits with GitLab CI
Breaking bad habits with GitLab CIBreaking bad habits with GitLab CI
Breaking bad habits with GitLab CI
 
Develop QNAP NAS App by Docker
Develop QNAP NAS App by DockerDevelop QNAP NAS App by Docker
Develop QNAP NAS App by Docker
 

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

Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Anthony Dahanne
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profileakrivarotava
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 

Recently uploaded (20)

Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profile
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 

Rh developers fat jar smackdown

  • 1. FAT JAR SMACKDOWN Spring Boot, Eclipse Vert.x, WildFly Swarm, Dropwizard James Falkner - Red Hat - @schtool
  • 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 (!)
  • 3. Fat JAR Fight Club (Hello World + Joda Time lib) 45 MB 14 MB 14 MB 7 MB
  • 4. 245 MB 214 MB 214 MB 207 MB 200 MB Code+Deps 200 MB Code+Deps 200 MB Code+Deps 200 MB Code+Deps
  • 7. ~ % 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 (~200M) Java (~200M) App Server + App (200M++) Build scripts (negligible) Trad. Java EE Container Layers
  • 8. 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 (4M) App (14M ++) Java (100M) Spring Boot “Hello World” Fat JAR in a Container
  • 9. 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 (4M) WF Swarm (Hollow JAR) (46M) Java (100M) Wildfly Swarm “Hello World” Skinny JAR/WAR in a Container App (Skinny WAR)
  • 10. 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/
  • 12. Fat, Thin, Skinny, Hollow support Fat Thin Skinny/Hollow Spring Boot ✔ ✔ (via SB Thin Launcher) ✔ (via Docker Prep Plugin) WildFly Swarm ✔ ✔ ✔ (via fractions) Eclipse Vert.x ✔ ✔ (via maven) ✔ (via Capsule?) Dropwizard ✔ ✔ (via maven)? ✔ (via Capsule?)
  • 13. ● Fat JAR ○ Works well in many cases, dev-friendly ○ 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