2016-09-06 38 views
0

重新下載我有一個具有以下Dockerfile在所有的package.json節點模塊正在後小變化

FROM node:6 

COPY package.json /tmp/package.json 

RUN npm config set registry http://registry.npmjs.org/ 
RUN cd /tmp && npm install 
RUN mkdir -p /app && cp -a /tmp/node_modules /app/ 

WORKDIR /app 

CMD npm run dev 

EXPOSE 80 

模塊沒有被重新安裝,如果package.json節點不修改一個容器的NodeJS每當我運行docker-compose build,這是很好的。但是,如果我再添加一個依賴項到package.json,似乎我所有的依賴項都從NPM重新下載,這浪費了很多時間。這是行爲的目的?

回答

3

這是圖層緩存的設計。當您使用與以前相同的輸入運行相同的命令時,Docker會找到一個從同一父節點開始並運行相同命令的層,並且可以重用該層。當你的輸入改變時(從COPY命令改變它的輸入),緩存變得無效,並且它回到建立在新節點:6圖像的頂部。從該圖像中,您以前下載的文件都不可用。