Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Containers en venv.  (gelezen 752 keer)

Containers en venv.
« Gepost op: 2022/06/09, 14:06:51 »
Ben net begonnen om wat te leren over Docker en Containers.
Ben dus absoluut beginner.   ;)

Er wordt vaak uitgelegd wat het verschil is tussen Docker en VirtualMachine. Dat verschil is me wel duidelijk.
Wat me (nog) niet  duidelijk is: het verschil in gebruik tussen en 'containers' en 'venv' (virtual environment)

(Zelf gebruik ik vaak python met venv.)
𝕸𝖎𝖘𝖈𝖊𝖗𝖊 𝖚𝖙𝖎𝖑𝖊 𝖉𝖚𝖑𝖈𝖎. (Ter leering ende vermaeck)
𝕹𝖎𝖑 𝖛𝖔𝖑𝖊𝖓𝖙𝖎𝖇𝖚𝖘 𝖆𝖗𝖉𝖚𝖚𝖒. (Niets is moeilijk voor hen die willen)
https://henk.oegema.com  (Op RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  24.04 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & TELLO drone (voor AI)

Offline bart85

  • Lid
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline MKe

  • Lid
Re: Containers en venv.
« Reactie #2 Gepost op: 2022/06/09, 19:11:22 »
Ben net begonnen om wat te leren over Docker en Containers.
Ben dus absoluut beginner.   ;)

Er wordt vaak uitgelegd wat het verschil is tussen Docker en VirtualMachine. Dat verschil is me wel duidelijk.
Wat me (nog) niet  duidelijk is: het verschil in gebruik tussen en 'containers' en 'venv' (virtual environment)

(Zelf gebruik ik vaak python met venv.)
Goede vraag en ik denk dat ik daar antwoord op kan geven. Mijn achtergrond: ik programmeer al 12 jaar professioneel in Python en gebruik al 8 jaar docker.

Docker en VENV zijn twee heel verschillende dingen. Er zijn een paar fundamentele veschillen. Zo is VENV alleen bedoeld voor python packages. Het is ook erg afhankelijk van het onderliggende systeem, al is het alleen al omdat je in VENV geen python versie kan draaien die niet ook al op het onderliggende systeem is geinstalleerd. VENV is mede hierdoor niet erg portable. VENV is wel eg gemakkelijk op te zetten en erg handig voor relatief kleine (minder enterprise) projecten.

Om een voorbeeld te geven. Stel je maakt een Django website. Het begin van de ontwikkeling kun je prima doen met VENV. Maar voor productie wil je misschien wel Postgres als database in plaats van SQLite, heb je celery nodig voor bepaalde reken-intensieve taken en onderhoudstaken in de achtergrond en moet je later voor de broodnodige opschaling ook nog een fatsoenlijke webserver als NGINX hebben in plaats van de Python testserver die in Django zit enz. Al die afhankelijkheden (RabbitMQ voor Celery, postgres en NGINX) worden niet gemanaged door pip en VENV. Natuurlijk kun je dat wel op je Ubuntu machine installeren, maar dat maakt het gelijk niet portable. Door dit op je machine te installeren maak je je programma meteen afhankelijk van het onderliggend systeem. Misschien draait je productie server wel RedHat (of nog erger, WindowsServer) met hele andere versies van Postgres en/of RabbitMQ. (Postgres draait geloof ik niet eens op Windows). Misschien wil je je systeem wel naar de cloud brengen.... Een ander probleem kan zijn dat je met meerdere projecten bezig bent en het lastig is om voor al die systemen de database etc. eisen gelijk te houden.

Dit is waar docker helpt. Met docker compose definieer je precies welke services en van welke versie je nodig hebt voor je programma. Met een commando start je die services en, beter nog, kun je ze weer laten verdwijnen. Je start de services zodra je gaat testen en sluit het weer af als je daarmee klaar bent. Upgraden van Postgres is gewoon een nieuwe docker pullen. Je hele combinatie van services kun je aansturen alsof het een programma is. Je definieert precies welke services van buiten te bereiken zijn en op welke poorten en welke services alleen intern je systeem te benaderen zijn.

Met evenveel gemak kopieer je de docker-compose.yml file naar een andere machine en start het hele systeem opnieuw, waarbij de configuratie precies gelijk is aan je ontwikkelomgeving, ongeacht op welk systeem het draait. Dit kan dus ook Windows zijn of BSD. Enige afhankelijkheid is dat docker actief moet zijn op de host. Met een klein beetje omwerken run je diezelfde configuratie in Kubernetes in de cloud of lokaal inclusief loadbalancing, autodeployment enz, volledig geschikt om op te schalen naar de grote buitenwereld.

Deployment is dus ook erg gemakkelijk want het is niet veel meer dan het docker pull commando.

Moraal: maak je kleine programmatjes voor eigen gebruik, waarbij er niet veel afhankelijkheden naar andere niet-python programma's zijn of waar je het voornamelijk gebruikt op hetzelfde systeem als waar je het ontwikkeld en schaalbaarheid is geen issue, dan is VENV prima. Voor meer enterprise omgevingen waar schaalbaarheid en onderhoudbaarheid van de servers belangrijk is, dan is docker een goede oplossing.

Hoe werk ik? Ik begin een project vaak simpel met Virtualenv (PyCharm werkt fantastisch hiermee). Database is in eerste plaats gewoon sqlite en ik probeer zo lang mogelijk allerlei ingewikkelde dingen te vermijden. Op het moment dat ik ga opschalen of dichter naar een eerste release kom dan schakel ik vaak over op docker, ook hier werkt Pycharm fantastisch mee samen. Voor simpele stand-alone scripts blijf ik vaak in VENV. Het vraagt minder van je computer en is gemakkelijker om mee te werken als je alle toeters en bellen niet nodig hebt.
« Laatst bewerkt op: 2022/06/09, 19:14:35 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Re: Containers en venv.
« Reactie #3 Gepost op: 2022/06/09, 19:25:09 »
@MKe: Bedankt voor de uitleg.  (ook bart85 bedankt voor de links.)

Ik ben een hobbyist, met kleine programma's voor Raspberry Pi,  Arduino en Jetson Nano.
Ik begrijp uit jouw verhaal dat ik geen Docker nodig heb voor mijn hobby programma's
Houd het dus maar op VENV.    ^-^
𝕸𝖎𝖘𝖈𝖊𝖗𝖊 𝖚𝖙𝖎𝖑𝖊 𝖉𝖚𝖑𝖈𝖎. (Ter leering ende vermaeck)
𝕹𝖎𝖑 𝖛𝖔𝖑𝖊𝖓𝖙𝖎𝖇𝖚𝖘 𝖆𝖗𝖉𝖚𝖚𝖒. (Niets is moeilijk voor hen die willen)
https://henk.oegema.com  (Op RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  24.04 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & TELLO drone (voor AI)

Offline MKe

  • Lid
Re: Containers en venv.
« Reactie #4 Gepost op: 2022/06/09, 19:36:38 »
@MKe: Bedankt voor de uitleg.  (ook bart85 bedankt voor de links.)

Ik ben een hobbyist, met kleine programma's voor Raspberry Pi,  Arduino en Jetson Nano.
Ik begrijp uit jouw verhaal dat ik geen Docker nodig heb voor mijn hobby programma's
Houd het dus maar op VENV.    ^-^
zolang je tevreden bent met VENV is er inderdaad geen reden om te switchen. Zodra je dingen als databases etc gaat installeren, zou docker interessant kunnen worden.