An EAR packaged with everything needed by the application.
Each service, or micro-service as it is fashionable now, got their own EAR.
Deployment of UNIX based OS, JEE application server, Oracle and respective EAR packages, done.
PS. Maybe "EAR" also supports Python. But then I'd argue "EAR" is a "container".
Using containers is essentially:
- uh, I have problem with these dependencies, dealing with RPMs is such a nightmare, I need to generate OS specific packages and there might be conflicts with existing packages that are used by the system...
- oh I know, let just bundle our app with the entire OS!
A container image should be "the bare minimum that allows the application to run".
The selling point of containers is to solve certain issues (seems like package management, removing dependency on the OS etc are the most popular).
To me it looks like instead fixing the actual issues, we are taking a blanket covering all of that crap and building our beautiful solution on top of that. We have a beautiful world with unicorns on top of a dumpster fire of mixing system dependencies with our application dependencies.
Also yesterday found something amusing a coworker was complaining that putting a small app into a base container resulted with image that was almost 1GB in size, compared to ~50MB when using a minimalistic one. When asked why not just use the minimalistic one I learned that it was mandated to use the standard image for everything.
To me this is absurd since by doing that aren't we essentially making a full circle?
Containers add a heavy abstraction on top of that. For me the simpler/better dependency management solution is nix.