Dockerfileにおけるファイル更新回数を利用したCOPY処理の分割によるイメージビルド時間の短縮

Docker のビルドはレイヤーの積み重ねによって行われる.レイヤーはRUN とCOPY とCMD によって作成される.課題として,一部ファイルの編集により該当のCOPY を行うレイヤーがキャッシュできなくなる分イメージのビルド時間が伸びる.これは,ファイルのチェックサムがファイル単位ではなくレイヤー単位で管理している事が原因である.この課題を解決するため,ユーザの用意したDockerfile に対し,一度にコピーされているファイル群をファイルの更新日時と更新回数でグループ分けし,3 分割してコピーすることで解決を試みる.評価として,提案適用前後でキャッシュを利用してコピーできたファイルの割合とビルドに要した時間の差を比較する.基礎実験として,キャッシュの使用の有無によるビルド時間の変化を調べた.基礎実験はgithub のdoge-unblocker リポジトリを対象に行った.実験結果は,一括コピーで4.9 秒,編集したファイルを後でコピーすると3.5 秒であった.編集したファイルのみを隔離して後でコピーすることで,そうしない場合の約71%のビルド時間となった. ...