Docker Buildミニチューニング


Docker nestを使用します.js, next.jsなどのnpmベースの複数のフレームワークが不要であれば,いくつかの微細な最適化について議論する.
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がキャッシュを最大限に使用できるようになります.😃