TheMak schreef op woensdag 7 juli 2021 @ 15:33:
Ik wil kijken of Python gebruikt kan worden als alternatief voor bash-scripts.
Ik weet niet of virtualisatie een oplossing is. of dat docker een oplossing is. Dan moet je de host up-to-date houden (security-patches), en alle dockers
(ik moet wel zeggen dat ik nog niet helemaal snap welk gedeelte van het OS binnen de docker valt, en welk gedeelte op de host).
Ik gebruik Python als alternatief voor BASH scripts

Dus ja, het kan. Is het altijd even handig? Dat niet per se. BASH kan een stuk korter zijn, maar in Python is het makkelijker om een complexere logica toe te passen (mijn mening, maar ik ben dan ook niet geweldig met BASH).
Tip: er zijn ook andere shells die je misschien prettiger vindt om mee te werken!
Voor de rest: een host moet je - altijd - uptodate houden
Een "Docker container" is een fancy begrip voor een proces dat simpelweg met beperkte rechten in een chroot draait. Dus op dezelfde kernel als de host, maar een andere bestandsstructuur (het Docker image, gecombineerd met eventuele volumes die gemount zijn).
De beperkte rechten worden o.a. gerealiseerd door namespaces in de Linux kernel. Zo kun je in een beperkte PID namespace zitten, waardoor het proces niet of nauwelijks met andere processen kan communiceren. Enzovoorts.
Docker is simpelweg wat tooling die er omheen gebouwd is om die isolatie eenvoudig en vooral ook reproduceerbaar te maken. Je kunt heel eenvoudig zelf images maken op een eenduidige manier die overal op dezelfde manier werken. En met docker-compose kun je ze ook nog eens combineren met elkaar en zo een "stack" maken van containers die in hun eigen netwerk draaien etc.
Qua security is een eventuele pitfall dat mensen vergeten / verzuimen hun containers bij te werken. Of ze als root draaien
Het grote voordeel is dus dat je een standaard Debian image kunt pakken, Python (of wat dan ook) en de juiste dependencies kunt toevoegen, jouw programma kunt toevoegen en als main entrypoint markeren.
Vervolgens kan letterlijk elke willekeurige Docker host jouw image uitvoeren. Want het voert gewoon jouw programma uit met de omgeving die jij in het image hebt gemaakt, maar wel direct op de kernel van de host (= dus praktisch net zo snel, geen "virtualisatie", en net zo efficiënt want het verbruikt ook niet meer geheugen).
Door de chroot denkt het proces dat dit image alles is. Het ziet alleen de bestandsstructuur van het image, niet van de host.
En dit is dan dus ook overal hetzelfde (op eventuele volume mounts na voor data persistence). LXC containers werken op een soortgelijke manier, BSD jails ook (in FreeBSD kon je 20 jaar geleden al een jail maken als ik het mij goed herinner... maar "containers" klinken nou eenmaal hipper en de kracht zit hem vooral in de tooling er omheen).
Maar ook Snaps werken bijvoorbeeld volgens hetzelfde principe. Zodat je de nieuwste software inclusief dependencies op jouw kernel kunt draaien.
[
Voor 11% gewijzigd door
Lethalis op 08-07-2021 00:06
]
Ask yourself if you are happy and then you cease to be.