「docker build --pull」の目的は何ですか?


17

Dockerイメージを構築するときは、通常使用しますdocker build .

しかし--pull、指定できることがわかったので、コマンド全体は次のようになりますdocker build --pull .

の目的がわかりません--pull。Dockersの公式ドキュメントには、「常に新しいバージョンのイメージをプルしようとする」とあり、これがこのコンテキストで何を意味するのかわかりません。

を使用docker buildして新しいイメージを作成し、最終的にそれをコンテナーレジストリのどこかに公開します。なぜあなたはまだ存在しないものを引っ張りたいのですか?

これはウェブ上で簡単に見つけられるような「シンプル」なものを期待しますが、これと同じような質問をする人は誰もいないようです。グーグルでの唯一の本当のヒットは、私が(上記のように)理解できないドッカーズの公式ドキュメントを参照しています。

ご協力いただきありがとうございます!

回答:


17

ローカルで既にタグ付けしたものを再利用する代わりに、ベースイメージの最新バージョンをプルします

たとえば、移動するタグ(などubuntu:bionic)に基づく画像を取ります。アップストリームは定期的に変更を行い、これを再構築しますが、ローカルに1か月前のイメージがある場合があります。Dockerは古いベースに対して喜んでビルドします。 --pull副作用としてプルするので、最新のベースイメージに対してビルドします

(古くて脆弱な可能性のあるイメージを使用する代わりに)できるだけ早く上流のセキュリティ修正を取得するためにそれを使用することが通常はベストプラクティスです。ただし、重大な変更とトレードオフする必要があります(不変のタグを使用しても、違いはありません)


これはubuntu:bionic(明らかに)バージョンが添付されていないため、画像についての非常に良い説明ですが、新しい画像を公開するときは常に異なります。すべてが理にかなっています。ありがとう!
ジム・アホ

1
たとえば、ベースイメージがありubuntu:0.1.0、それらが新しいイメージを発行したが同じバージョンである場合、つまり 、ubuntu:0.1.0これはdocker build --pull新しいイメージ全体を再度ダウンロードすることを意味しますか?(これはほとんどの人が私が好むものだと思います)
ジム・アホ

@JimAhoからの最後の質問を誰かが明確にしてくれることを期待しています。イメージがプッシュされたばかりで、他に何も変更されていない場合、それは再構築されないのは事実ですか?
learning2learn

2
@ learning2learn答えは「はい」です。Dockerイメージのタグは単なる文字列なので、「0.1.0」は「bionic」の答えの例と変わりません
Anthony Sottile

@AnthonySottileありがとうございます。とても。
learning2learn

1

簡単な答え。docker buildローカルのdockerfileからビルドするために使用されます。docker pullDockerハブからプルするために使用されます。dockerファイルなしでdocker buildを使用すると、エラーがスローされます。

指定した場合、--pullまたは:latestdockerは最新バージョン(存在する場合)をダウンロードしようとします

基本的に、-pullを追加すると、実行されるたびに最新バージョンをプルしようとします。


あなたがレイヤードイメージを持っている場合-それは常にそれらのすべてを引き出しますか?
ジム・アホ

レイヤー化された画像がある場合、一部はマシンにキャッシュされ(古いレイヤー)、新しいレイヤーがプルされます。
DuDoff

0

Dockerでは、たとえばに  --pull フラグを  渡すことができます  。これは、ローカルで使用可能なバージョンにもかかわらず、ビルドで常に最新のコンテナーイメージが使用されるようにするための推奨される方法です。ただし、言及する価値のあるもう1つのポイント:docker builddocker build . --pull -t myimage

基本イメージの更新のチェックを含め、ビルドが完全に再ビルドされるようにするには、ビルド時に次のオプションを使用します。

--no-cache -これにより、すでに利用可能なレイヤーが強制的に再構築されます。

したがって、完全なコマンドは次のようになります。

docker build . --pull --no-cache --tag myimage:version

同じオプションが利用可能ですdocker-compose

docker-compose build --no-cache --pull


通常の使用では必要ありません--no-cache。ベースイメージが更新された場合(および--pull新しいバージョンが取得された場合)、キャッシュは自動的に無効になります。COPYキャッシュを無効にする別のコードの場合も同様です。これが通常影響する唯一のことapt-get installは、ネットワークでホストされているパッケージのようなものを実行している場合です。その--no-cache場合、ベースイメージが更新されていなくても、新しいバージョンがチェックされます。
David Maze、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.