A typical Java EE application comprises the following layers:
airhacks/java: the OS + Java layer. Only serves as a base, "abstract" layer. Changes on OS and Java releases and patches.
airhacks/[appserver]: this layer inherits from
airhacks/javaand only contains the application server installation. Only changes on new application server releases.
airhacks/[appserver]-configured: inherits from 2. and contains project-specific configuration like e.g. JMS Queues, JDBC DataSources etc. Has to be rebuilt on projects-specific configuration changes like e.g. -Xmx or -Xms changes. This layer is optional
airhacks/[project-name]: inherits from 2. or 3. Only contains a Thin War. Is rebuilt with each
Fortunately the base images are big, but have to rebuilt only a few times in year. The application / project images change several times a day, but are tiny. The creation of a full docker image with https://github.com/AdamBien/docklands takes usually: ~100ms and only adds the WAR size (usually a few MB) to the total size.
The base images exist only once at your hard drive and are shared across different application servers and applications (aka microservices).
docker run -d -p 8080:8080 --name payara-ping airhacks/payara-ping
Docklands in action: