Docker noneとは何ですか:画像はありませんか?

Docker noneとは何ですか:画像なしの記事の翻訳に注目します Project Atomicブログから。







最後の数日間、Docker <none>:<none>



イメージの演習に費やしました。 それらが何であり、何ができるかを説明するために、私は質問を投げかけるこの投稿を書きます:







  1. Docker <none>:<none>



    イメージとは何ですか?
  2. ぶら下がり画像とは何ですか?
  3. docker images -a



    を実行すると、 docker images -a



    <none>:<none>



    docker images -a



    れるのはなぜですか?
  4. docker images



    docker images -a



    の違いは何ですか?


質問に答える前に、 <none>:<none>



には2種類のイメージがあることを思い出してください<none>:<none>



イメージ:良いイメージと悪いイメージ。







格好良い<なし>:<なし>



それらを理解するには、Dockerイメージファイルシステムの仕組みとイメージレイヤーの編成方法を理解する必要があります。 この投稿では、例としてFedoraイメージを使用します。 ラップトップ上でDockerデーモンが実行されているので、dockerハブからfedoraイメージをダウンロードします。







ドッカー画像







このスクリーンショットでは、 docker images



fedora:latest



docker images



示していdocker images -a



すでに2つのfedora:latest



イメージを持っていますfedora:latest



<none>:<none>



。 Dockerを使用している場合、画像の数<none>:<none>



はダウンロードされた画像の数とともに指数関数的に増加することに気づきました。







<none>:<none>



イメージとは何ですか? これを理解するには、Dockerファイルシステムのレイヤーがどのように構成されているかを知る必要があります。 各ドッカーイメージはレイヤーで構成され、レイヤーには他のレイヤーとの親子関係があります。 dockerファイルシステムのすべてのレイヤーは、デフォルトで/var/lib/docker/graph



保存されます。 Dockerの用語では、グラフデータベースと呼ばれます。 fedora:latest



例では、 /var/lib/docker/graph



にある2つのレイヤーで構成されてい/var/lib/docker/graph









ドッカーグラフ







IMAGE ID



は、ディレクトリ/var/lib/docker/graph



内のレイヤーに対応してい/var/lib/docker/graph



docker pull fedora



と、イメージは一度に1つのレイヤーをロードします。 48ecf305d2cf



最初に48ecf305d2cf



レイヤーをロードし、 <none>:<none>



マークを付けます。これは、 48ecf305d2cf



fedora:latest



イメージのレイヤーの1つにすぎないためです。 Dockerの用語では、 -a



オプションのために中間イメージと呼ばれます。







次に、Dockerはレイヤーded7cd95e059



をロードし、 ded7cd95e059



fedora:latest



とマークします。 fedora:最新のイメージは、これら2つのレイヤーで構成され、親と子の間の接続を形成します。







親子







親子関係の存在を確認するために、レイヤーded7cd95e059



JSONファイルを確認できます。







親json







大丈夫! これで、 <none>:<none>



の意味がわかりました。 これらは、 docker images -a



を使用して表示できる中間docker images -a



。 これらはハードドライブをオーバーフローさせませんが、コマンドの出力で多くのスペースを占有します。 そして、それらが何に関連しているのかを理解することは非常に困難です。







(1)、(3)、(4)と答えました。 (2)に光を当てましょう。







悪い<なし>:<なし>



その他の<none>:<none>



イメージ<none>:<none>



は、ハードドライブをオーバーフローさせる可能性がある個別のイメージです。







JavaおよびGolangプログラミング言語では、メモリの独立したブロックは、コードのどこからでもリンクのないブロックです。 このような言語のガベージコレクションシステムは、定期的にブロックを個別としてマークし、ヒープに返します。その後、これらのブロックは将来使用できるようになります。 それらと同様に、Dockerファイルシステムの別のレイヤーは未使用のものであり、画像からのリンクはありません。 したがって、これらの分離されたイメージをクリアするようにDockerに指示する方法が必要です。







docker images -a



での<none>:<none>



意味はすでにわかっています。 これらは中間画像であると上記で述べられています。 ただし、 docker images



の出力に<none>:<none>



docker images



がない場合、クリーニングに使用できる中間イメージがあります。 彼らはどこから来たのですか?







これらの中間イメージは、 docker build



またはpull



コマンドの結果です。 具体例として、







以前にhello_world



ベースフェドライメージを使用してhello_world



イメージをhello_world



ましょう。 Dockerfileを使用しhello_world



イメージをhello_world









こんにちは世界







上のスクリーンショットに示すように、Dockerfileを使用してhello_world



イメージを正常に作成しました。







hello_world



イメージをビルドしてから時間が経過し、Fedoraの新しいバージョンがリリースされました。 新しいFedoraイメージをダウンロードしましょう。







ニューフェドラ







新しいFedoraイメージを入手しました。 次に、新しいFedoraを使用してhello_world



イメージを構築しhello_world



。 同じDockerfileを使用してイメージを再度アセンブルしましょう。







ぶら下がり







ded7cd95e059



て確認すると、古いFedoraイメージにはIMAGE ID( ded7cd95e059



)があり、上のスクリーンショットの新しいFedoraイメージにはIMAGE ID( 5c6d07393f9f



)があります。つまり、Fedoraイメージは正常に更新されています。 一番上のスクリーンショットで注意すべき重要なことは、画像<none>:<none>



です。







覚えているなら、 docker images -a



指定された<none>:<none>



docker images -a



は中間(良い)画像ですが、この<none>:<none>



画像は通常のドッカー画像です。 これは孤立したイメージであり、クリーニングする必要があります。 Dockerfileを使用してhello_world



イメージhello_world



再構築すると、古いFedoraへの参照がマークされず、切り離されました。







このコマンドを使用して、孤立したイメージをクリーニングできます。







 docker rmi $(docker images -f "dangling=true" -q)
      
      





Dockerには現在、自動ガベージコレクションシステムがありません。 持っているといいでしょう。 それまでの間、このコマンドを使用して手動でガベージを収集できます。








All Articles