我怎样才能减lessDocker镜像的大小

我有Node.js应用程序,我作为docker集装箱运行。 这是该应用程序的Dockerfile。

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 ] 

我可以在此Dockerfile中修改某些内容以减less泊坞窗图像大小

正如大多数人所build议的那样,使用官方的节点阿尔卑斯山图像作为基本图像是一个简单的解决scheme,以减less图像的整体大小,因为即使基本的阿尔卑斯山图像比基本的Ubuntu图像要小得多。

Dockerfile可能如下所示:

 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" ] 

这几乎是一样的,应该按预期工作。 大部分来自你的Ubuntu镜像的命令都可以在高山镜像中应用。

当我添加模拟数据来创build一个类似的项目,你可能会得到一个大小为491 MB的Ubuntu映像,而高山版本只有62.5 MB大:

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

如果你基于Ubuntu,那么一个聪明的举动就是做这个

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

最后一行将清除很多:)你应该总是apt-get更新在同一行,因为否则它将被caching,而不是下一个版本,如果你添加另一个库进行安装。

尝试将所有RUN指令打包在一起,这会减less中间图像的数量。 (但它不会减小尺寸)。

apt-get update后添加rm -rf /var/lib/apt/lists/*将删除所有无用的apt-get内容,从而减less图像大小。

你也可以删除vim你的形象。 为什么你会在docker容器中使用vim?

 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 ]