¿Cómo puedo networkingucir el tamaño de las imágenes de Docker?

Tengo la aplicación Node.js que estoy ejecutando como contenedor acoplable. Aquí hay un file Docker para esa aplicación.

FROM ubuntu ARG ENVIRONMENT ARG PORT RUN apt-get update -qq RUN apt-get install -y build-essential nodejs npm nodejs-legacy vim RUN mkdir /consumer_portal ADD . /consumer_portal WORKDIR /consumer_portal RUN npm install -g express RUN npm install -g path RUN npm cache clean RUN npm install EXPOSE $PORT ENTRYPOINT [ "node", "server.js" ] CMD [ $PORT, $ENVIRONMENT ] 

¿Puedo modificar algo en este file Docker para networkingucir el tamaño de la image del acoplador?

Usar la image alpina del nodo oficial como image base, como la mayoría sugiere aquí, es una solución simple para networkingucir el tamaño total de la image, porque incluso la image alpina base es mucho más pequeña en comparación con la image ubuntu base.

Un Dockerfile podría verse así:

 FROM node:alpine ARG ENVIRONMENT ARG PORT RUN mkdir /consumer_portal \ && npm install -g express path COPY . /consumer_portal WORKDIR /consumer_portal RUN npm cache clean \ && npm install EXPOSE $PORT CMD [ "node", "server.js" ] 

Es casi lo mismo y debería funcionar como se espera. La mayoría de los commands de tu image de ubuntu se pueden aplicar de la misma manera en la image alpina.

Cuando agrego datos falsos para crear un proyecto similar al que podría tener, se obtiene una image de Ubuntu con un tamaño de 491 MB y la versión alpina tiene solo 62.5 MB de tamaño:

 REPOSITORY TAG IMAGE ID CREATED SIZE alpinefoo latest 8ca6f338475e 5 minutes ago 62.5MB ubuntufoo latest 38620a1bd5a6 6 minutes ago 491MB 

Si se basa en Ubuntu, entonces una jugada inteligente es hacer que esto

 RUN apt-get update && apt-get install -y \ build-essential \ cwhatever-you-want \ vim \ && rm -rf /var/lib/apt/lists/* 

La última línea borrará mucho 🙂 Siempre debe get la actualización en la misma línea, porque de lo contrario será almacenada en caching y no activada en las próximas comstackciones si agrega otra lib para instalar.

Intente empaquetar todas las instrucciones RUN juntas, networkingucirá el número de imágenes intermedias. (Pero no networkingucirá el tamaño).

Agregar rm -rf /var/lib/apt/lists/* después apt-get update networkingucirá el tamaño de la image eliminando todas las cosas inútiles de apt-get.

También puedes eliminar vim desde tu image. ¿Por qué usarías vim en un contenedor de docker?

 FROM ubuntu ARG ENVIRONMENT ARG PORT RUN apt-get update \ && apt-get install -y build-essential nodejs npm nodejs-legacy vim \ && rm -rf /var/lib/apt/lists/* \ && mkdir /consumer_portal ADD . /consumer_portal WORKDIR /consumer_portal RUN npm install -g express \ && npm install -g path \ && npm cache clean \ && npm install EXPOSE $PORT ENTRYPOINT [ "node", "server.js" ] CMD [ $PORT, $ENVIRONMENT ]