Tengo un proyecto que se compila en un archivo binario y ejecutar ese archivo binario expone algunas API REST.
Para compilar el proyecto, necesito la imagen acoplable A que tiene el compilador y todas las bibliotecas necesarias para producir el ejecutable. Para ejecutar el ejecutable (es decir, alojar el servicio), puedo salirme con la mía con una imagen B mucho más pequeña (solo una distribución básica de Linux, sin necesidad del compilador).
¿Cómo se usa Docker en tal situación?
Mi pensamiento para este escenario es que puedes preparar dos imágenes base:
base-image:buildbase-image:runtimeY luego divida su proceso de compilación en dos pasos:
base-image:build y luego coloque su executable en algún lugar, como NFS o cualquier registro desde donde pueda obtenerlo para usarlo más adelante;Dockerfile que FROM base-image:runtime , obtenga su artefacto/ejecutable desde cualquier lugar generado por el Paso 1, docker build su imagen de entrega y luego docker push a su registro para su lanzamiento.Espero que esto pueda ser útil :-)
mkdir local_dir docker run -dv $PWD/local_dir:/mnt BUILD_CONTAINERcompila el código y guárdalo en /mnt en el contenedor. Se escribirá en local_dir en su sistema de archivos host y persistirá después de que se destruya el contenedor.
Ahora debe escribir un Dockerfile y agregar un paso para copiar en el nuevo binario, luego compilar. Pero por el bien de ejemplo...
docker run -dv $PWD/local_dir:/mnt PROD_CONTAINER Su contenedor, y todo lo demás en local_dir, residirá en el contenedor en /mnt/