Estoy trabajando en un libro sobre el arranque de microservicios, y el autor proporciona el siguiente archivo acoplable, que está destinado a ser utilizado en el desarrollo.**
FROM node:12.18.1-alpine WORKDIR /usr/src/app COPY package*.json . CMD npm config set cache-min 999999 && \ npm install && \ npm run start:dev El comando CMD aquí es obviamente algo inusual. La justificación proporcionada es la siguiente: al realizar la instalación de npm install cuando se inicia el contenedor, podemos "hacer uso del almacenamiento en caché de npm para que sea mucho más rápido instalarlo al inicio del contenedor que si lo instalamos durante el proceso de compilación".
¿Qué está pasando detrás de escena aquí con el comando CMD ? ¿En qué se diferencia esto de tener un comando RUN que instala las dependencias antes del comando CMD ? Y relacionado, ¿por qué necesitamos establecer una política cache-min ?
**Los archivos de origen no se copian aquí porque están incluidos en un volumen montado.
EDITAR: aquí también está el archivo de composición de la ventana acoplable
version: '3' services: history: image: history build: context: ./history dockerfile: Dockerfile-dev container_name: history volumes: - /tmp/history/npm-cache:/root/.npm:z - ./history/src:/usr/src/app/src/:z ports: - '4002:80' environment: - PORT=80 - NODE_ENV=development restart: 'no' ...Cuando desarrolla, a menudo cambia los paquetes que se incluyen en el proyecto. Al hacerlo de esta manera, no necesita crear una nueva imagen cuando lo hace. Simplemente puede detener e iniciar el contenedor e instalará los nuevos paquetes.
Sin embargo, estoy un poco sorprendido por la copia de package*.json. Supongo que eso se pasaría a la imagen usando un volumen como dices que es el código fuente. Todavía se puede hacer así y tal vez lo sea. Necesitaríamos ver el comando de docker run para saber si lo es.