Docker Buildミニチューニング
Docker nestを使用します.js, next.jsなどのnpmベースの複数のフレームワークが不要であれば,いくつかの微細な最適化について議論する.
Dockerは通常、Dockerfileを使用してカスタム画像を構築します.
Dockerfileでは、複数のコマンドを使用できます.各コマンドの実行時に新しいイメージレイヤが生成されます.
ルート位置のソースコードを変更すると、COPY./appコマンドを実行すると、ファイルが変更されるのでcacheではなく、新しいイメージレイヤがスタックされます.前のイメージレイヤが変更されたため、キャッシュではなく、後のコマンドが再作成されます.
しかし、ソースコードが変わりました.package.jsonファイルが変更されていない場合は、npmを再インストールする必要はありません.
このため,ルート位置のノード関連ソースを変更する際にnpm installを行わないように,上記のコードを少し修正する必要がある.もちろん、画像の制作過程でしか意味がなく、新しく作った画像には違いはありません.
Docker最適化では、変更した部分を再適用するだけで、Image Layerがキャッシュを最大限に使用できるようになります.😃
Dockerは通常、Dockerfileを使用してカスタム画像を構築します.
Dockerfileでは、複数のコマンドを使用できます.各コマンドの実行時に新しいイメージレイヤが生成されます.
FROM node
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 80
CMD ["node", "server.js"]
上記Dockerfileがあるとします.ルート位置のソースコードを変更すると、COPY./appコマンドを実行すると、ファイルが変更されるのでcacheではなく、新しいイメージレイヤがスタックされます.前のイメージレイヤが変更されたため、キャッシュではなく、後のコマンドが再作成されます.
しかし、ソースコードが変わりました.package.jsonファイルが変更されていない場合は、npmを再インストールする必要はありません.
このため,ルート位置のノード関連ソースを変更する際にnpm installを行わないように,上記のコードを少し修正する必要がある.もちろん、画像の制作過程でしか意味がなく、新しく作った画像には違いはありません.
FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 80
CMD ["node", "server.js"]
Dockerfileを上記のように変更するとpackageになります.jsonが変更された場合にのみ新しいnpm installコマンドが実行されるためpackage.jsonが変更した場合にのみ、新しいnpm installコマンドの実行を最適化できます.Docker最適化では、変更した部分を再適用するだけで、Image Layerがキャッシュを最大限に使用できるようになります.😃
Reference
この問題について(Docker Buildミニチューニング), 我々は、より多くの情報をここで見つけました https://velog.io/@heojeongbo/Docker-build-소소한-최적화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol