CubicLouve

Spring_MTの技術ブログ

docker build時のキャッシュの判定

メモ書き

スタートはdispatchersから https://github.com/moby/moby/blob/cf0ce96eb129ebcc7d07f0f47a8683c16f228c7d/builder/dockerfile/dispatchers.go

ADD や COPY

https://github.com/moby/moby/blob/cf0ce96eb129ebcc7d07f0f47a8683c16f228c7d/builder/dockerfile/dispatchers.go#L94-L133

createCopyInstructionでキャッシュなどの判定も含めて行う

performCopyがファイルの変更を行う本体 https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/dockerfile/internals.go#L160

createCopyInstruction

https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/dockerfile/copy.go#L110-L132

getCopyInfosForSourcePathsからgetCopyInfoForSourcePathがよばれて、copyInfoを作成する。 https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/dockerfile/copy.go#L134-L151

getCopyInfoForSourcePathでもろもろ生成される。 https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/dockerfile/copy.go#L40-L45

キャッシュの判定で使われるハッシュ値はここで生成される

https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/remotecontext/lazycontext.go#L37-L85

https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/remotecontext/filehash.go

moby/versioning.go at 46cdcd206c56172b95ba5c77b827a722dab426c5 · moby/moby · GitHub

performCopy

キャッシュの判定には上記のcreateCopyInstructionで作られたcopyInstructionを元に行う

probeCacheが担う https://github.com/moby/moby/blob/46cdcd206c56172b95ba5c77b827a722dab426c5/builder/dockerfile/internals.go#L428-L437

でキャッシュがあればそれを使い、そうでなければ新しくlayerを作る。