web-dev-qa-db-fra.com

Quelle est la différence entre Docker et Python virtualenv?

D'après ce que j'ai compris de Docker, c'est un outil utilisé pour les environnements virtuels. Dans leur jargon, cela s'appelle "la conteneurisation". C’est plus ou moins ce que fait virtualenv de Python. Cependant, vous pouvez utiliser virtualenv in Docker. Alors, s'agit-il d'un environnement virtuel dans un environnement virtuel? Je ne comprends pas comment cela fonctionnerait, alors quelqu'un pourrait-il clarifier, s'il vous plaît?

35
danielschnoll

Un virtualenv n'encapsule que les dépendances Python. Un conteneur Docker encapsule un système d'exploitation complet .

Avec un Python virtualenv, vous pouvez facilement basculer entre les versions Python et leurs dépendances, mais vous êtes bloqué avec votre système d'exploitation hôte.

Avec une image Docker, vous pouvez remplacer l'intégralité du système d'exploitation - installez et exécutez Python sur Ubuntu, Debian, Alpine et même Windows Server Core.

Il existe Docker images avec toutes les combinaisons de systèmes d’exploitation et Python auxquelles vous pouvez penser, prêtes à être arrêtées et utilisées sur tous les systèmes sur lesquels Docker est installé.

38
sp0gg

L’environnement virtuel Python "contiendra" uniquement Python runtime, c’est-à-dire python interprète et python alors que Docker isole le système complet ( l'ensemble du système de fichiers, toutes les bibliothèques d'espace utilisateur, les interfaces réseau) .Docker est donc beaucoup plus proche de la machine virtuelle que de l'environnement virtuel.

13
jil

Ajoutons à ce qui précède: il est judicieux de combiner docker et venv: certains systèmes d’exploitation sont livrés avec python est installé pour fournir des applications "à proximité du système d’exploitation", par exemple, à ma connaissance, apt sur debian (et ses dérivés). Le python venv permet à un développeur d'expédier une python app qui nécessite une version d'interpréteur différente sans affecter le python livré avec OS) Maintenant, puisque Docker "isole l'ensemble du système d'exploitation" comme indiqué ci-dessus, il en va de même pour une image Docker. Par conséquent, à mon avis, si une image Docker est requise/souhaitée, il est préférable de créer une image à l'intérieur de l'image Docker. pour votre python.

4
Blindfreddy