(Dockerノート):共同ファイルシステム、階層化された理解、ミラーリングの原則のミラーリングのコミット

目次

Dockerイメージの説明

ミラーリングとは何ですか?

Dockerイメージの読み込み原理

階層化された理解

ミラーのコミット


Dockerイメージの説明

ミラーリングとは何ですか?

  • ミラーは、軽量で、実行可能な、独立したソフトウェアパッケージの動作環境に基づいて開発されたソフトウェアの動作環境やソフトウェアをパッケージ化するために使用される。これは、含まれているすべてのコンテンツは、特定のソフトウェアを実行するために必要なコード、実行時、ライブラリ、および環境を含みます変数と構成ファイル
    • すべてのアプリケーションは、Dockerイメージを直接パッケージ化することで直接実行できます。
  • それでは、ミラーを取得する方法は?
    • リモート倉庫からダウンロード
    • 友達のコピー
    • ミラーDockerfileを自分で作成する

Dockerイメージの読み込み原理

  • UnionFS(ユニオンファイルシステム)

    • ダウンロード時に見たレイヤーは次のとおりです。

​​​​​​

  • UnionFS(ユニオンファイルシステム)

    • これは、階層化された軽量で高性能なファイルシステムです。ファイルシステムの変更レイヤーごとにサブミットとして重ね合わせてサポートします。同時に、同じ仮想ファイルシステムの下に異なるディレクトリをマウントできます(unite単一の仮想ファイルシステムへのディレクトリ)。

    • UnionFSはDockerミラーリングの基礎です。ミラーリングはレイヤーを介して継承できます。基本的なミラーリング(親ミラーなしのミラー)に基づいて、さまざまな特定のアプリケーションミラーを作成できます

      機能複数のファイルシステムを同時にロードしますが、外部からは1つのファイルシステムしか表示されません。共同ロードは、ファイルシステムの各レイヤーを重ね合わせて、最終的なファイルシステムにすべての基本ファイルとディレクトリが含まれるようにします

    • 例:たとえば、mysqlとtomcatの両方にcentos環境が必要です。mysqlが最初にインストールされている場合、centos環境が存在します。次に、tomcatをインストールして、centosをダウンロードせずにこのcentosのレイヤーを共有します。

  • Dockerイメージの読み込み原理

    • Dockerのイメージは、実際には階層化ファイルシステム(この階層化ファイルシステムUnionFS)で構成されています。

    • BootFS(ブートファイルシステム)には主にブートローダーとカーネルが含まれます。ブートローダーは主にブートローダーカーネルです。Linuxは最初の起動時にBootFSファイルシステムを読み込みます。Dockerイメージの最下層はBootFSです。このレイヤーは、ブートローダーやカーネルを含む、私たちの典型的なLinux / Unixシステムと同じです。ブートロードが完了すると、カーネル全体がメモリに配置されます。この時点で、メモリを使用する権利はBootFSからカーネルに移されています。このとき、システムはBootFSもアンロードします。

    • RootFS(ルートファイルシステム)は、BootFSの上にあり、標準的なLinuxシステムの/ dev、/ proc、/ bin、/ etcなどの標準のディレクトリとファイルを含みます。RootFSは、Ubuntu CentOSなど、さまざまなオペレーティングシステムのディストリビューションです。

  • 質問:通常、仮想マシンにインストールするCentOSは数Gですが、Dockerが200Mしかないのはなぜですか?
    • これは、合理化されたOSの場合、RootFSは非常に小さく、最も基本的なコマンド、ツール、およびライブラリを含めるだけでよいためです。最下層はホストのカーネルを直接使用するため、RootFSを提供するだけで十分です。異なるLinuxディストリビューションでは、BootFSは基本的に同じですが、RootFSは異なるため、異なるディストリビューションでBootFSを共有できます。
    • これが、仮想マシンが分レベルで開始し、コンテナーが第2レベルで開始する理由です。
  • 階層化された理解

  • レイヤードミラー
    • ミラーをダウンロードするときにログ出力を確認できます。これは、レイヤーごとにダウンロードされていることがわかります
    • 次の最初のレイヤーはすでに存在し、ダウンロードする必要はありません

    • Dockerイメージはなぜこの階層構造を採用するのですか?
    • 最大のメリットは、リソースの共有です。たとえば、同じベースイメージからビルドされた複数のイメージがある場合、ホストはディスク上に1つのベースイメージを保持するだけでよく、メモリにロードする必要があるのは1つのベースイメージだけなので、すべてのコンテナにサービスを提供できます。 、そしてミラーの各レイヤーを共有できます。
    • docker inspectコマンドから画像のレイヤー表示でき  ます
  • すべてのDockerイメージは基本イメージレイヤーから始まり、変更または新しいコンテンツが追加されると、現在のイメージレイヤーの上に新しいイメージレイヤーが作成されます。
  • 最初のレイヤーイメージ:Ubuntu Linux 16.04に基づいて新しいイメージを作成します。このイメージにPythonパッケージを追加すると、ベースイメージレイヤーに2番目のイメージレイヤーが作成されます。セキュリティパッチを追加し続けると、3番目のイメージレイヤーが作成されます以下に示すようなミラーレイヤー。

  • ミラーレイヤーを追加する間、ミラーは常にすべてのミラーの現在の組み合わせを維持します。これを理解することは非常に重要です。次の図は簡単な例を示しています。各ミラーレイヤーには3つのファイルが含まれ、ミラーには2つのファイルが含まれています1つのミラーレイヤーに6つのファイル

  • 上の画像のミラーレイヤーは前の画像とは少し異なります。主な目的は、ファイルの表示を容易にすることです。
  • 次の図は、少し複雑な3層の画像を示しています。外側から見ると、画像全体には6つのファイルしかありません。これは、最上層のファイル7がファイル5の更新バージョンであるためです。

  • この場合、上のミラーレイヤーのファイルが下のミラーレイヤーのファイルを上書きします。これにより、ファイルの更新バージョンを新しいミラーレイヤーとしてミラーに追加できます。
  • Dockerはストレージエンジン(新しいバージョンではスナップショットメカニズムを採用)を使用してミラーレイヤースタックを実装し、複数のミラーレイヤーが外部で統一されたファイルシステムとして表示されるようにします。
  • Linuxで使用可能なストレージエンジンは、AUFS、OverLay2、Device Mapper、Btrfs、およびZFSです。名前が示すように、各ストレージエンジンはLinuxの対応するファイルシステムまたはブロックデバイステクノロジーに基づいており、各ストレージエンジンには独自のパフォーマンス特性があります。
  • Dockerは、Windows上のWindowsフィルターストレージエンジンのみをサポートし、NTFSファイルシステムに基づいてレイヤーとCoWを実装します。
  • 次の図は、システムディスプレイと同じ3層ミラーを示しています。すべてのミラーレイヤーがスタックされ、統合されて、外部に統一されたビューを提供します。

  • 特徴
    • Dockerイメージは読み取り専用です。コンテナが起動する、新しい書き込み可能なレイヤーがイメージの上に読み込まれます
    • このレイヤーは通常コンテナーレイヤーと呼ばれ、コンテナーの下にあるすべてのレイヤーはミラーレイヤーと呼ばれます

ミラーのコミット

  • docker commitがコンテナを送信して新しいコピーになります
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名[tag]
  • 場合:
    • 問題:tomcatコンテナのwebappsの下にファイルがない。webapps.distディレクトリの内容は、起動するたびにwebappsディレクトリにコピーする必要があります(cp -r webapps.dist / * webapps /)
    • 解決策:後で使用するためにミラーを自分でパッケージ化する
docker commit -a="add apps" -m="add webapps app" 3c5af7b82a6c tomcatnew:1.0
  • ミラーを見る

  • 現在のコンテナーの状態を保存する場合は、コミットしてコンテナーを送信、イメージを取得できます。次回は、仮想マシンのスナップショットのように、このイメージを使用してコンテナーを直接起動できます。

おすすめ

転載: blog.csdn.net/baidu_41388533/article/details/108543514