ローカルで利用可能な Dockerfile を使用して Docker イメージを構築しようとしています。
docker build -t newimage .
私も以前にこのコマンドを何度も使用しましたが、どういうわけか現在は機能しておらず、その理由を見つけることができません。
誰かが可能な解決策や問題を探すのに役立つ可能性のある領域について私を助けてくれれば、私は本当に役に立ちます.
たとえば、関連する可能性のある他の投稿をすでに見てきました: Dockerビルドタグリポジトリ名
ローカルで利用可能な Dockerfile を使用して Docker イメージを構築しようとしています。
docker build -t newimage .
私も以前にこのコマンドを何度も使用しましたが、どういうわけか現在は機能しておらず、その理由を見つけることができません。
誰かが可能な解決策や問題を探すのに役立つ可能性のある領域について私を助けてくれれば、私は本当に役に立ちます.
たとえば、関連する可能性のある他の投稿をすでに見てきました: Dockerビルドタグリポジトリ名
わかった!問題の原因がわかりました。
Docker ビルド プロセス
Docker イメージをビルドすると、イメージの作成中に他のいくつかの中間イメージが生成されます。docker images次の中間イメージの生成で以前のイメージが削除されるため、それらが表示されることはありません。
-torを使用して提供するタグは--tag最終ビルド用であり、明らかに中間コンテナには同じタグが付けられていません。
問題の説明
Dockerfile を使用して Docker イメージをビルドしようとすると、プロセスが正常に完了せず、次のようなメッセージが表示されることがあります。Successfully built image with IMAGEID
したがって、失敗したビルドがリストに表示されないことは明らかです。docker images
今、タグ付きの画像<none>は他の画像(中間)です。これにより、イメージは存在するがタグがないという混乱が生じますが、イメージは実際には最終的なビルドであるべきものではないため、タグ付けされていません。
Docker には何の問題もありません。
画像には複数のタグを付けることができます:
alpine 3.4 4e38e38c8ce0 6 weeks ago 4.799 MB
alpine latest 4e38e38c8ce0 6 weeks ago 4.799 MB
この例では、id の画像にand4e38e38c8ce0がタグ付けされています。実行すると、タグがイメージから削除され、新しく構築されたイメージ (別の ID を持つ) に割り当てられます。alpine:latestalpine:3.4docker build -t alpine .latest4e38e38c8ce0
画像から最後tagの画像を削除しても、画像は自動的に削除されません。として表示され<none>ます。
Docker もキャッシュを使用します。したがって、Dockerfile を使用してイメージをビルドし、そのファイルを変更してイメージを再度ビルドすると、変更を元に戻して再度ビルドすると、2 つのイメージが作成されます。最初のステップと最後のステップでビルドしたイメージは同じです。2 番目の画像は「タグ付き」になり<none>ます。
イメージの複数のバージョンを保持したい場合は、変更を加えるたびに whereを変更します。docker build -ttag:versionimage:tag .versiontag
編集:私がタグと呼んだものは実際にはイメージ名であり、バージョンと呼んだものはタグと呼ばれます: https://docs.docker.com/engine/reference/commandline/tag/