Por lo que entiendo sobre Docker, es una herramienta que se usa para entornos virtuales. En su jerga, se llama "contenerización". Esto es más o menos lo que hace virtualenv de Python. Sin embargo, puede usar virtualenv en Docker. Entonces, ¿es un entorno virtual dentro de un entorno virtual? Estoy confundido en cuanto a cómo funcionaría esto, entonces, ¿alguien podría aclararlo?
python
docker
virtualenv
danielschnoll
fuente
fuente
Respuestas:
Un virtualenv solo encapsula las dependencias de Python. Un contenedor de Docker encapsula un sistema operativo completo .
Con un virtualenv de Python, puede cambiar fácilmente entre las versiones y dependencias de Python, pero está atascado con su sistema operativo host.
Con una imagen de Docker, puede cambiar todo el sistema operativo: instalar y ejecutar Python en Ubuntu, Debian, Alpine e incluso Windows Server Core.
Hay imágenes de Docker con cada combinación de versiones de SO y Python que se le ocurran, listas para desplegar y usar en cualquier sistema con Docker instalado.
fuente
El entorno virtual de Python "contenedorizará" solo el tiempo de ejecución de Python, es decir, el intérprete de Python y las bibliotecas de Python, mientras que Docker aísla todo el sistema (todo el sistema de archivos, todas las bibliotecas de espacio de usuario, interfaces de red). Por lo tanto, Docker está mucho más cerca de una máquina virtual que de un entorno virtual.
fuente
Agregando a lo anterior: existe un caso para combinar docker y venv: algunos sistemas operativos se envían con python instalado para proporcionar aplicaciones 'OS-near', por ejemplo, que yo sepa, apt en debian (y sus derivados). Python venv permite a un desarrollador enviar una aplicación de Python que requiere una versión de intérprete diferente sin afectar la Python enviada con el sistema operativo. Ahora, dado que Docker 'aísla todo el sistema operativo' como se indicó anteriormente, lo mismo se aplica a una imagen de Docker. Por lo tanto, en mi opinión, si se requiere / desea una imagen de Docker, es una buena práctica crear un venv dentro de la imagen de Docker para su aplicación de Python.
fuente