私は dockerfile を構築しようとしています - 繰り返し行を追加してテストしています。私の理解では、ドッカーは既に構築された行をキャッシュし、追加した新しい行から開始します。コンテナでビルドを呼び出すたびに、ゼロからビルドするだけのようです。これは正常ですか?そうでない場合 - 私は何を間違っていますか?
2 に答える
私の理解が正しければ、Docker ファイルの各行がコンテナーへのコミットであるバージョン管理システムとして Docker を見ることができます。
Dockerfile に新しい行を追加すると、Docker はコンテナーの最後のリビジョンを取得し、新しいコミットを行います。Dockerfile の途中に行を追加すると、Docker は以前のリビジョンの 1 つを取得し、ツリーのこの部分に新しいコミットを行います。
デマスが言ったように、行を追加するだけの場合、前の行がキャッシュされます。
ただし、Dockerfile のどこかに次のような行がある場合
ADD . /some/path
変更されたのが Dockerfile だけだったとしても、Docker はその行が変更されたと見なします。そのため、追加しているフォルダー内で何も変更されていない限り、その行以降はキャッシュされません。
docker build
コマンドの出力に細心の注意を払うことで、これが発生しているかどうかを確認できるはずです。
補足として: この結果、Dockerfile をビルドしている場合は、通常、事前に準備を行い、できるだけ遅くディレクトリにファイルを追加する必要があります。もちろん、残念ながらキャッシュするのが難しいファイルに対して何かを行う必要があります (ある種のビルド プロセスなど)。