Docker イメージの原理: 共同ファイル システムと階層化された理解 (詳細な例)
この記事では、共同ファイル システム、階層構造、階層化プラクティスに関連する問題など、共同ファイル システムと、Docker イメージの原則の階層化された理解に関する関連知識を提供します。
Docker—ユニオン ファイル システムとミラーリング原理の階層的理解
1. ユニオン ファイル システム
UnionFS( Unionファイル システム)
UnionFS (Union File System): Union File System (UnionFS) は、1 つのサブミッションを適用できるレイヤーとしてファイル システムへの変更をサポートする、階層型で軽量かつ高性能のファイル システムです。レイヤーごとに、異なるディレクトリを同じ仮想ファイル システムにマウントできます (複数のディレクトリを 1 つの仮想ファイル システムに結合します)。 Union ファイル システムは Docker イメージの基礎です。階層化によるイメージの継承が可能で、ベースイメージ(親イメージなし)をベースに、さまざまな具体的なアプリケーションイメージを生成できます。
さらに、異なる Docker コンテナはいくつかの基本的なファイル システム レイヤーを共有し、同時に独自の変更レイヤーを追加できるため、ストレージ効率が大幅に向上します。
Docker で使用される AUFS (AnotherUnionFS) は、ユニオン ファイル システムです。 AUFS は、各メンバー ディレクトリの読み取り専用、読み取り書き込み、およびホワイトアウト可能なアクセス許可の設定をサポートしています (Git ブランチと同様)。同時に、AUFS には階層に似た概念があります。読み取り専用アクセス許可の場合、アクセス許可ブランチは論理的に段階的に変更できます (読み取り専用部分には影響を与えません)。
Docker は現在、AUFS、btrfs、vfs、DeviceMapper などのジョイント ファイル システム タイプをサポートしています。
機能: 複数のファイル システムを同時にロードしますが、外部からは 1 つのファイル システムしか見えません。共同ロードではファイル システムの各層が重ね合わされるため、最終的なファイル システムには基礎となるすべてのファイル システムが含まれます。ファイル、ファイルとディレクトリ。
ベース ミラー
ベース ミラーは、他のミラーに依存しないことを意味します。完全に最初から構築され、他のミラーはその上に構築されます。これは、建物の基礎や Docker ミラーリングの起源にたとえることができます。
ベースイメージには 2 つの意味があります: (1) 他のイメージに依存せず、最初から構築される、(2) それをベースに他のイメージを拡張できる。
つまり、基本イメージと呼ばれるものは、通常、Ubuntu、Debian、CentOS などのさまざまな Linux ディストリビューションの Docker イメージです。
Docker イメージの読み込み原理
Docker のイメージは実際にはレイヤーごとのファイル システムで構成されており、このファイル システムのレイヤーは UnionFS です。
一般的な Linux では、起動して実行するには 2 つの FS が必要です。bootfs rootfs:
bootfs (ブート ファイル システム) には主に bpotloader とカーネルが含まれ、bootloader には主に Bootカーネルをロードすると、Linux は最初の起動時に bootfs ファイル システムをロードします。Docker イメージの最下層は bootfs です。この層は、ブート ローダー ブートローダーやカーネル カーネルなど、一般的な Linux/Unix システムと同じです。ブートのロードが完了すると、カーネル全体がメモリ内に存在します。この時点で、メモリの使用権は bootfs からカーネルに転送されます。このとき、システムは bootfs もアンインストールします。
rootfs (ルート ファイル システム)、bootfs の上にあります。一般的な Linux システムの /dev、/proc、/bin、/etc などの標準ディレクトリとファイルが含まれます。ルートは、Ubuntu、Centos などのさまざまなオペレーティング システム ディストリビューションです。
Docker イメージにカーネルがないのはなぜですか?
イメージ サイズに関して言えば、比較的小さなイメージは 1 KB をわずかに超えるか、数 MB です。一方、カーネル ファイルには数 10 MB が必要なので、イメージにはカーネルはありません。コンテナとして開始された後、イメージはホストのカーネルを直接使用し、イメージ自体は対応する rootfs (ユーザー空間ファイル) のみを提供します。 /dev/、/proc、/bin、/etc およびその他のディレクトリなど、システムの通常の動作に必要なシステムが存在するため、コンテナ内には基本的に /boot ディレクトリは存在せず、/boot にはシステムに関連するファイルとディレクトリが格納されます。カーネル。
コンテナはホストのカーネルを使用して直接起動および実行され、物理ハードウェアを直接呼び出さないため、ハードウェア ドライバーが関与せず、カーネルとドライバーは使用されません。仮想マシン テクノロジの場合、各仮想マシンは独自の独立したカーネルを持ちます。
2. 階層構造
Docker イメージは階層構造になっており、各層はその上の他の層の上に構築され、機能を実現します。コンテンツを段階的に追加すると、Docker イメージもレイヤーでダウンロードされます。例として Redis イメージのダウンロードを考えてみましょう:
可能な限り新しいイメージはベースイメージからレイヤーごとに生成されます。ソフトウェアをインストールするたびに、既存のイメージにレイヤーを追加します。
Docker イメージはなぜこの階層構造を採用しているのでしょうか?
最大のメリットはリソースの共有です。たとえば、複数のイメージが同じベース イメージから構築されている場合、ホストはディスク上に 1 つのベース イメージを保持するだけでよく、メモリにロードする必要があるのは 1 つのベース イメージだけであるため、すべてのコンテナにサービスを提供できます。画像の各レイヤーを共有することができます。
書き込み可能なコンテナ レイヤー
Docker イメージは読み取り専用です。コンテナが起動すると、新しい書き込み可能なレイヤーがミラー トップに読み込まれます。
この新しいレイヤーは書き込み可能なコンテナーレイヤーであり、コンテナーの下にあるものはすべてミラーレイヤーと呼ばれます。
Docker は、コピーオンライト戦略を使用して、基本イメージのセキュリティを確保し、パフォーマンスとスペース使用率を向上させます。
- コンテナがファイルを読み取る必要がある場合
最上位の画像レイヤーから開始して下方向に検索し、見つかったらメモリに読み込みます。すでに存在する場合は、それをメモリに読み込みます。メモリ内の 、 を直接使用できます。つまり、同じマシン上で実行されている Docker コンテナは、実行時に同じファイルを共有します。
- コンテナがファイルを変更する必要がある場合
上から下に検索し、見つかったらそれをコンテナ層にコピーします。はコンテナ レイヤーです。このファイルの場合、イメージ レイヤーのファイルを確認して、コンテナ レイヤーのファイルを直接変更することはできません。
- コンテナでファイルを削除する必要がある場合
上から下に検索し、見つかったらコンテナに削除を記録します。これは実際の削除ではありません。 、しかしソフトな削除。これにより、画像サイズは増加するだけで、減少しません。
- コンテナがファイルを追加する必要がある場合
イメージ レイヤーに影響を与えずに、ファイルをコンテナの最上位の書き込み可能なレイヤーに直接追加します。
ファイルの追加、削除、変更など、コンテナーに対するすべての変更はコンテナー層でのみ行われます。コンテナー レイヤーのみが書き込み可能で、コンテナー レイヤーの下にあるすべてのイメージ レイヤーは読み取り専用であるため、イメージは複数のコンテナーで共有できます。
3. レイヤー化の練習 - イメージの送信をコミットする
イメージを通じてコンテナーを作成し、コンテナー レイヤーを操作し、イメージ レイヤーを変更しないで、コンテナー レイヤーとイメージ レイヤーをパッケージ化します。操作後は新規画像として送信してください。
docker commit: コンテナーを使用して新しいイメージを作成します。
構文:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS 説明:
- **-a*ミラー作成者が送信;
- **-c *Dockerfile 命令を使用してイメージを作成します;
- **-m *送信時の説明テキスト;
- **-p *コミット時にコンテナを一時停止します。
使用例: イメージを通じてコンテナを作成し、コンテナ レイヤーを操作して、操作したコンテナ レイヤーとイメージ レイヤーを新しいイメージにパッケージ化して送信します。
1. まず Tomcat イメージをダウンロードします
2. Tomcat イメージを使用して Tomcat コンテナを作成して実行します:
docker run -d --name="tomcat01" tomcat
3. 実行中の Tomcat コンテナに入ります:
docker exec -it tomcat01 /bin/bash
4. Tomcat コンテナの webapps.dist ディレクトリ内のファイルを webapps ディレクトリにコピーします:
cp -r webapps.dist/* webapps
5. Docker commit commit image
コンテナ dc904437d987 を新しいイメージ、送信者情報と説明情報を追加します。送信されたイメージの名前は tomcatplus で、バージョンは 1.0 です:
docker commit -a="wanli" -m="add webapps files" dc904437d987 tomcatplus:1.0
新しい Tomcat イメージのサイズが変更されたことがわかります。 commit は元のイメージよりも大きくなりますが、ファイルをコンテナー層にコピーするため、Tomcat イメージは少し大きくなります。
推奨学習: 「docker ビデオ チュートリアル 」
以上がDocker イメージの原理: 共同ファイル システムと階層化された理解 (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Dockerコンテナを終了する4つの方法:コンテナ端子でCtrl Dを使用するコンテナターミナルに出口コマンドを入力しますDocker stop< container_name>コマンドを使用するDocker Kill< container_name>ホストターミナルのコマンド(フォース出口)

Dockerの外部ホストにファイルをコピーする方法:Docker CPコマンドを使用:Docker CP [Options]< Container Path> <ホストパス>。データボリュームの使用:ホストにディレクトリを作成し、-vパラメーターを使用してコンテナを作成するときにディレクトリをコンテナにマウントして、双方向ファイルの同期を実現します。

Dockerコンテナを再起動する方法:コンテナID(Docker PS)を取得します。コンテナを停止します(docker stop< container_id>);コンテナを起動します(docker start< container_id>);再起動が成功していることを確認します(Docker PS)。その他の方法:Docker Compose(Docker-Compose Restart)またはDocker API(Dockerドキュメントを参照)。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Docker画像を更新する手順は次のとおりです。最新の画像タグ新しい画像をプルする新しい画像は、特定のタグのために古い画像を削除します(オプション)コンテナを再起動します(必要に応じて)

Dockerプロセス表示方法:1。DockerCLIコマンド:Docker PS; 2。SystemDCLIコマンド:SystemCTL Status Docker; 3。CLIコマンドを作成するDocker:Docker-Compose PS。 4。プロセスエクスプローラー(Windows); 5。 /procディレクトリ(Linux)。

国内のミラーソースに切り替えることができます。手順は次のとおりです。1。構成ファイル/etc/docker/daemon.jsonを編集し、ミラーソースアドレスを追加します。 2。保存して終了した後、Docker Service Sudo SystemCtlを再起動してDockerを再起動して、画像のダウンロード速度と安定性を改善します。
