Docker層とDockerFileの最適化


私が最近遭遇した1つの小さな問題は、実行するために遅いビルド時間があったプロジェクトでした.私が気が付いたことは、私がHTMLを変えるだけであるならば、なぜ私が1000 + NPMパッケージをダウンロードする必要があるかについて、設定変更とHTML変化のためにインストールされるNPMパッケージでした?狂気
Dockerは、特定の方法でDockerFileが書き込まれた場合のみコマンドをキャッシュできます.次のシナリオを実行します.
FROM node:9
COPY /src /src
RUN npm install
RUN npm build
Dockerは各コマンドをキャッシュし、Layerを作成できます.Dockerがそのコマンドに対してファイルが変更されていないことを検出すると、レイヤがキャッシュされます.
コピーを2つのコマンドに分割することによって、我々はキャッシングを利用して、NPMパッケージを修正しないビルドのためにビルド時間を速めることができます:
FROM node:9
COPY /src/package*.json /src
# Docker will cache these 2 layers if package.json and package.lock.json are unmodified
RUN npm install

# copy the rest of our code and run a fresh build
COPY /src /src
RUN npm build
1行を追加するだけで、私たちはビルドのほとんどをスピードアップすることができます-私のシナリオでは、ローカルビルドとCIサーバービルド(NPMパッケージは成熟したプロジェクトではほとんど変更されませんでした).
この1つのラインDockerfileの変更は私たちのチームをビルドごとに数分保存しました
それはすべての人々です!