3 ms·
Python is a good example. You have several teams, each working on their own Python app. Each app is in various maturity levels, some are old in maintenance mod
by tiew9Vii 3y ago
Python is a good example.
You have several teams, each working on their own Python app. Each app is in various maturity levels, some are old in maintenance mode, some are new using the latest libraries.
These teams or other teams also have other languages they deploy outside of Python.
I'm familiar with Python but far from an expert. I think outside of Docker you would need to use Virtual env and maybe publish to a pip repo or package an an RPM/Deb. You'd have to roll your own build/deployment scripts. Alternatively you'd have ansible scripts or similar, maybe packer to build a vm or something. Multi tenant Python install's are bit of a pain which is why I think you'd need virtual env.
If you do use pip that will not work for teams who do not use Python so you'd have a second set of special build scripts and another way to distribute the app.
So in that scenario you have multiple different deployment mechanisms, a bunch of custom scripts etc.
Using a container would give you a common deployment mechanism across all languages. In your scenario though you should absolutely be a fascist greybeard and say "You must use our companies blessed base image before we will deploy your app". Then when a security update comes out you update the base image and send an email out saying "we see your app is using base image v0.0.0, we have released a new image with patched security vulnerability xyz, please update your application to use it by YYYY-MM-DD"
Nix wouldn't be to bad an alternative for a container but it has a few rough edges and getting everyone to build the nix way can be a big ask. Nix would solve the dependency + distribution issue with it's binary cache.
- rbanffy 3y ago> "You must use our companies blessed base image before we will deploy your app". Then when a security update comes out you update the base image and send an email out saying Either that or you trigger a rebuild of their images because a dependency changed. This is one of the very few cases where using “:latest” is the right thing to do. I maintain a docker image on Docker Hub (rbanffy/vm370) and I rebuild it from time to time so that it picks up the latest versions of the underlying OS. I still need to migrate it from Debian to something more minimalistic so that this becomes less of an overhead.