140 votes

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

D'après ce que je comprends de Docker, c'est un outil utilisé pour les environnements virtuels. Dans leur jargon, on appelle cela la "conteneurisation". C'est plus ou moins ce que fait le virtualenv de Python. Cependant, vous pouvez utiliser virtualenv sur Docker. Alors, est-ce un environnement virtuel à l'intérieur d'un environnement virtuel ? Je ne comprends pas comment cela peut fonctionner, alors quelqu'un pourrait-il m'éclairer ?

44 votes

C'est une bonne question, mais elle sera probablement classée comme hors sujet. virtualenv n'est pas une véritable isolation, c'est une isolation du pauvre en utilisant des pirates de chemins et des liens symboliques - vous êtes toujours dans votre propre système d'exploitation. Docker fournit plus d'isolation, mais pas autant qu'une machine virtuelle à part entière. On peut considérer un conteneur comme un moyen terme entre une boîte virtuelle (lourde, coûteuse) et un virtualenv (léger, bon marché). La création d'un virtualenv à l'intérieur d'un conteneur n'a pas beaucoup de sens car l'isolation est déjà assurée par Docker, il n'y aurait pas beaucoup d'intérêt à le faire.

156voto

sp0gg Points 1256

Un virtualenv encapsule uniquement les dépendances Python. Un conteneur Docker encapsule un tout l'OS .

Avec un virtualenv Python, vous pouvez facilement passer d'une version de Python à l'autre et d'une dépendance à l'autre, mais vous êtes coincé avec votre OS hôte.

Avec une image Docker, vous pouvez échanger tout le système d'exploitation - installer et exécuter Python sur Ubuntu, Debian, Alpine, voire Windows Server Core.

Il y a des Dockers images avec toutes les combinaisons de systèmes d'exploitation et de versions de Python imaginables, prêts à être utilisés sur tout système sur lequel Docker est installé.

2 votes

En outre, il existe images sans distorsion pour "plusieurs langages de programmation populaires" (y compris Python) provenant de Google qui "ne contiennent que le moteur d'exécution du langage de programmation". ArchWiki/Docker

33voto

jil Points 1669

L'environnement virtuel Python ne "conteneurisera" que le runtime Python, c'est-à-dire l'interpréteur Python et les bibliothèques Python, tandis que Docker isole l'ensemble du système (l'ensemble du système de fichiers, toutes les bibliothèques de l'espace utilisateur, les interfaces réseau). Docker est donc beaucoup plus proche d'une machine virtuelle que d'un environnement virtuel.

1 votes

Y a-t-il un avantage à créer un environnement virtuel à l'intérieur d'un conteneur docker, étant donné que le conteneur ne servira qu'une application web flask.

14voto

Blindfreddy Points 173

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

6 votes

Cela ralentirait-il le temps de réponse (deux niveaux de virtualisation) ?

5 votes

L'environnement virtuel Python modifie l'environnement python ; il ne virtualise pas l'exécution de l'interprète python. Le conteneur Docker n'est pas virtualisé, sauf s'il est exécuté avec un hyperviseur (Docker Machine).

0 votes

Je pense toujours qu'il sera fastidieux pour moi de monter docker à l'intérieur d'un système d'exploitation, je fais habituellement cela, je programme dans un langage shell toutes les dépendances du projet en dehors de pytohn et je les exécute automatiquement, disons en production via ssh.

1voto

Michael.Sun Points 319

"un environnement virtuel, une arborescence de répertoires autonome qui contient une installation Python pour une version particulière de Python, ainsi qu'un certain nombre de paquets supplémentaires".

Un conteneur Docker fournit un niveau supérieur d'abstraction/isolation, il peut avoir son propre "espace de processus, système de fichiers, espace réseau, espace ipc, etc.".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X