2016-09-06 1 views
0

私はpackage.jsonが変更されていない場合、ノードモジュールは再インストールされていない以下のDockerfileすべてのノードモジュールは、小さな変更後に再ダウンロードされている

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 

とNodeJSコンテナを持っています私がdocker-compose buildを実行するたびに、それは良いです。しかし、package.jsonに依存関係をもう1つ追加すると、すべての依存関係がNPMから再ダウンロードされているように見えます。これは時間を浪費します。この動作は意図されていますか?

答えて

3

これはレイヤーキャッシュの設計です。以前と同じ入力で同じコマンドを実行すると、Dockerは同じ親から開始したレイヤーを見つけて同じコマンドを実行し、そのレイヤーを再利用できます。入力が変更されると(COPYコマンドの入力を変更すると)、キャッシュは無効になり、新しいノード:6イメージの上に構築されます。そのイメージから、以前にダウンロードしたファイルはありません。

関連する問題