目次- Docker イメージ
- 鏡とは何ですか?
- Dockerイメージの読み込み原理
- コミットミラー
- Docker イメージの概要
Docker イメージ鏡とは何ですか?- イメージは軽量で実行可能なスタンドアロンソフトウェアパッケージ特定のソフトウェアを実行するために必要なソフトウェアを含むパッケージ化されたソフトウェア実行環境および実行環境に基づいて開発されたソフトウェア
代碼 、ランタイム、庫 、環境變量 、配置文件 などすべて。 - すべてのアプリケーションは Docker イメージに直接パッケージ化して直接実行できます。
- 画像はどうやって入手するのですか?
リモートリポジトリのダウンロード 友達コピー ミラーDockerFile 自分で作成する Dockerイメージの読み込み原理ユニオンFS
- UnionFS: Union File System (UnionFS) は、
分層 輕量級 で高性能 ファイル システムであり、ファイル システムの変更を単一のコミットとしてレイヤーごとに重ね合わせることができ、複数のディレクトリを単一の仮想ファイル システムに統合できます。 Union ファイル システムは Docker イメージの基礎となります。イメージは階層化により継承できます。ベースイメージ(親イメージなし)をベースに、さまざまな特定アプリケーションイメージを作成できます。 - 特徴: 1回限り複数のファイル システムを同時にロードしますが、外部からは 1 つのファイル システムしか見えません。ジョイント ロードでは、すべてのファイル システムを異なるレベルでロードします。重ね合わせたので最終的なファイルシステムには、基礎となるファイルとディレクトリがすべて含まれる。
Docker鏡像加載原理
- Docker イメージは、実際には UnionFS などのファイル システムのレイヤーで構成されています。
- bootfs (ブートファイルシステム) には、主にブートローダとカーネルが含まれます。ブートローダは主にカーネルのブートとロードを行います。Linux を起動した直後は、bootfs ファイルシステムがロードされます。Docker イメージの最下層は boots です。このレイヤーは、ブートローダーとカーネルを含む一般的な Linux/Unix システムと同じです。ブートがロードされると、カーネル全体がメモリ上に配置されます。このとき、メモリの使用権は bootfs からカーネルに移行しており、システムは bootfs もアンロードします。
- roots (ルート ファイル システム)、bootfs より上。一般的な Linux システムの /dev、/proc、/bin、/etc などの標準ディレクトリとファイルが含まれます。 rootfs は、Ubuntu、Centos などのさまざまなオペレーティング システム ディストリビューションを指します。

通常、仮想マシンにインストールするCentOS は数 GB ですが、Docker はなぜ 200 MB しかないのでしょうか? 
- 合理化された OS の場合、基礎となるレイヤーがホスト カーネル自体を直接使用し、ルートのみを提供する必要があるため、rootfs は非常に小さくなり、最も基本的なコマンド、ツール、プログラム ライブラリのみを含める必要があります。異なる Linux ディストリビューションでは、bootfs は基本的に同じですが、rootfs は異なる場合があるため、異なるディストリビューションで bootfs を共有できることがわかります。
- 仮想マシンは1分レベル、コンテナは2分レベル!レイヤーで
Docke 理解する階層的思考: レイヤーごとにダウンロードし、レイヤーごとにチェックし、存在する場合はスキップし、そうでない場合はダウンロードする
[root@docker ~]# docker pull redis
デフォルトタグの使用: 最新
最新: library/redis からプル
69692152171a: すでに存在します
a4a46f2fd7e0: プル完了
bcdf6fddc3bd: プル完了
2902e41faefa: プル完了
df3e1d63cdb1: プル完了
fa57f005a60d: プル完了
ダイジェスト: sha256:7e2c6181ad5c425443b56c7c73a9cd6df24a122345847d1ea9bb86a5afc76325
ステータス: redis:latest の新しいイメージをダウンロードしました
docker.io/ライブラリ/redis:最新 - Docker イメージがこの階層構造を採用しているのはなぜでしょうか?
- 私の考えでは、最大の利点はリソースの共有です。たとえば、同じベース イメージから複数のイメージが構築される場合、ホストはディスク上に 1 つのベース イメージを保持するだけでよく、メモリにロードする必要があるベース イメージも 1 つだけなので、すべてのコンテナーにサービスを提供でき、イメージの各レイヤーを共有できます。
- イメージのレイヤーを表示するには
docker image inspect +容器 コマンドを使用します。 -
Layers を観察する

階層化の意味を理解する - すべてのDockerイメージはベースイメージレイヤーから始めて、変更を加えたり新しいコンテンツを追加したりすると、現在の画像レイヤーの上に新しい画像レイヤーを作成します
- 簡単な例を挙げると、Ubuntu Linux 16.04 をベースに新しいイメージを作成した場合、これが新しいイメージの最初のレイヤーになります。イメージに Python パッケージを追加すると、ベース イメージ レイヤーの上に 2 番目のイメージ レイヤーが作成されます。セキュリティ パッチをさらに追加すると、3 番目のイメージ レイヤーが作成されます。
- 下の図に示すように、画像には現在 3 つの画像レイヤーが含まれています (これはデモンストレーション用の非常に単純な例です)。

追加の画像レイヤーが追加されても、画像は常に現在のすべての画像の組み合わせのままであることを理解することが重要です。次の図は、各イメージ レイヤーに 3 つのファイルが含まれ、イメージに 2 つのイメージ レイヤーからの 6 つのファイルが含まれる単純な例を示しています。 
- 上の画像の画像レイヤーは、前の画像とは少し異なります。主な目的は、ファイルの表示を容易にすることです。
- 次の図は、少し複雑な 3 層の画像を示しています。外から見ると、画像全体には 6 つのファイルしかありません。これは、最上位層のファイル 7 がファイル 5 の更新バージョンであるためです。

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

階層型ダウンロード利点 一部のアプリケーションのレイヤーが同じであると仮定すると、それらを直接再利用できます。 特徴 - Dockerイメージは読み取り専用。コンテナが起動すると、新しい書き込み可能なレイヤーがイメージの上に読み込まれます。
- このレイヤーは通常、コンテナ レイヤー (run) と呼ばれ、コンテナの下にあるものはすべてイメージ レイヤー (remote pull) と呼ばれます。
- すべての操作は
容器層 に基づいている

コミットミラー- ミラーを送信するにはどうすればいいですか?
-
Docker commit
docker commit はコンテナをコミットして新しいコピーにします。docker commit -m="コミットされた説明" -a="作成者" コンテナ ID ターゲットイメージ名: [TAG]
#デフォルトのTomcatイメージを実行 [root@docker ~]# docker run -it -p 8080:8080 tomcat
[root@docker ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
792ca37197e8 tomcat "catalina.sh run" 34 秒前 32 秒前に起動 0.0.0.0:8080->8080/tcp、:::8080->8080/tcp upbeat_mcnulty
[root@docker ~]# docker exec -it 792ca37197e8 /bin/bash
#このデフォルトの tomcat には webapps アプリケーションがないことがわかりました。ミラーリングのため、公式のミラーリングのデフォルトの webapps にはファイルがありません。基本ファイルを自分でコピーします。root@792ca37197e8:/usr/local/tomcat# cp -r webapps.dist/* webapps
#ブラウザアクセス、テスト成功 http://192.168.100.100:8080/
# 変更したコンテナを送信して新しいイメージにします [root@docker ~]# docker commit -a="pakho" -m="add webapps app" 792ca37197e8 tomcat02:1.0
sha256:d6d429f9d2ba25af8f66bd3e7a7de489cf2219828ea755ce1d0a1a7816c27731
[root@docker ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
tomcat02 1.0 d6d429f9d2ba 28秒前 672MB Docker イメージの概要
- Docker イメージの主な機能は、レイヤー化、コピーオンライト、コンテンツ アドレス指定、ユニオン マウントです。
- Docker イメージは、Docker コンテナを実行するための基盤です。Docker イメージがなければ、Docker コンテナは存在できません。これは、Docker の設計原則の 1 つでもあります。
- Docker イメージは結局のところイメージであり、静的コンテンツであることは理解できますが、Docker コンテナは動的コンテンツであるため異なります。動的コンテンツというと、プロセス、メモリ、CPU などが思い浮かびます。実際、Dockerコンテナは動的コンテンツとして、これらを含みます
- 理解しやすいように、Docker コンテナは 1 つ以上の実行中のプロセスと考えることができます。これらの実行中のプロセスは、対応するメモリ、対応する CPU コンピューティング リソース、対応する仮想ネットワーク デバイス、および対応するファイル システム リソースを占有します。 Docker コンテナが占有するファイル システム リソースは、Docker イメージのイメージ レイヤー ファイルによって提供されます。
以上がDockerイメージ原理の詳しい内容です。Dockerイメージについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:- Dockerイメージの作成とプロジェクト全体のワンクリックパッケージングとデプロイ
- イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア
- Docker用国産イメージウェアハウスの使い方
- Docker ロード後にイメージ名が none になる問題の解決方法
- docker によってプルされたイメージがどこに保存されるかの詳細な説明
- Docker を使用してイメージをローカルにパッケージ化してデプロイする方法
- Dockerの国内イメージソースを変更する方法
|