Puede ser npm, yarn, composer, bundler, pip, bower, webpack u otros … pero generalmente existe el mismo problema, las dependencias con docker.
¿Cómo configura Docker cuando sus dependencias binarias son un subdirectorio de código, y el sistema operativo host y el sistema operativa del contenedor Docker son diferentes?
En otras palabras, dónde se debe colocar en Docker las dependencias para gestionar entre distintos sistemas operativos.
Opción 1: nunca instale dependencias en el sistema operativo host
Si está desarrollando en Docker, necesitará montar su código desde el sistema de archivos del host en el contenedor para poder editar el código con su editor de host.
Pero para que se ejecute en la máquina virtual Linux proporcionada por Docker Desktop.
El gran problema aquí es que si sus dependencias tienen compilados binarios en ellos.
Si los instaló primero en el host, no se ejecutarán en Docker Linux si su sistema operativo host es macOS o Windows.
Para evitar eso, use docker-compose para instalar sus dependencias antes de usar:
docker-compose run <app-name> <dep install command>
Opción 2: Mueva las dependencias en la creación de imágenes y oculte las instaladas en el host.
La otra opción separa sus dependencias del host de las de la imagen y el contenedor.
Requiere un poco de planificación por adelantado.
Primero, configure su imagen para instalar dependencias fuera del directorio de trabajo de sus aplicaciones.
La mayoría de los sistemas de administración de paquetes admiten esta opción, pero cada uno necesita una configuración diferente para garantizar que funcione (generalmente involucrando variables de entorno y actualizando $ PATH).
A menudo lo muevo hacia arriba en un directorio para que se vea algo así como:
Luego, en el docker-compose, debemos asegurar de que cualquier dependencia que está montada en enlace con su código fuente esté oculta dentro del contenedor.
Esto se puede hacer agregando un volumen que monte el directorio dep en un volumen tmp vacío, como:
Espero que eso te ayude a repensar tu configuración de desarrollo para que sea óptima para como usas Docker. También espero que te quede claro donde colocar las dependencias en Docker.
Si quieres aprender Docker, tienes la oportunidad de atender este curso de Agile611.