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.