前面に書かれた前回の記事では、コンテナ ネットワークについて学び、コンテナ ネットワーク ドライバー ブリッジの動作原理について比較的詳しく紹介しました。今日は、コンテナのもう 1 つの重要な領域であるストレージについて見てみましょう。 コンテナストレージは、次の 2 つのカテゴリに分けられます。 1 つはイメージに関連し、「Docker コンテナ テクノロジーの基礎: ユニオン ファイル システム OverlayFS」の記事で説明されているコンテナ レイヤーのコピーオンライト機能です。デフォルトでは、コンテナで作成されたすべてのファイルは、書き込み可能なコンテナ レイヤーに保存されます。コンテナ レイヤーにファイルを直接保存するこの方法では、データの永続化と共有が難しくなります。ストレージ ドライバーに依存しているため、この追加の抽象化により、ホスト ファイル システムに直接書き込むデータ ボリュームを使用する場合と比較してパフォーマンスが低下します。 もう 1 つはホスト ストレージです。これは、ホスト ディレクトリをコンテナーにバインドまたはマウントして使用し、コンテナーが停止した後でもデータが保持されるようにします。この短いエッセイでは主に後者について紹介します。 複数のストレージマウント方法ここでは、Docker ホスト上でデータが保存されるさまざまな場所に基づいて、次の図を描きます。 1.バインドマウントバインドマウントはボリュームに比べて機能が制限されています。バインドマウントを使用すると、ホスト上のファイルまたはディレクトリがコンテナにマウントされます。ファイルまたはディレクトリは、ホスト マシン上の完全なパスによって参照されます。ディレクトリは Docker ホスト上にすでに存在している必要はありません。存在しない場合は、Docker によって作成されます。 自動的に作成できるのはディレクトリのみであることに注意してください。 -v オプションを使用して、ディレクトリ /nginx/html をコンテナにバインドマウントしてみましょう。 docker run -dt -v /nginx/html:/usr/share/nginx/html --name nginx nginx docker inspect nginx でコンテナのマウントフィールドを表示する 「マウント」: [ { 「タイプ」:「バインド」 「ソース」: 「/nginx/html」、 「宛先」: 「/usr/share/nginx/html」、 "モード": "", 「RW」:真、 「伝播」: 「rprivate」 } ]、 次に、docker ホストに index.html を作成し、hello nginx と記述して、コンテナの IP にアクセスします。明らかに、マウントが有効になっています。 [root@localhost ~]# echo "hello nginx" > /nginx/html/index.html [root@localhost ~]# カール 172.17.0.4 こんにちは、nginx ここで問題があります。Docker ホストを介してファイルを変更し、コンテナ内のファイルを有効にすることができます。逆に、コンテナはホスト ファイル システム上のコンテンツを変更、作成、削除できます。この問題を解決するには、コンテナを作成するときに、次の読み取り専用権限のようにマウント ディレクトリの権限を構成します。 docker run -dt -v /nginx/html:/usr/share/nginx/html:ro --name nginx nginx したがって、バインド マウントを使用する場合は、ホスト ファイル システムを操作するので、次の点に注意する必要があります。
2. 巻数ボリューム ストレージ ボリュームは、Docker によって作成および管理されます。docker volume create コマンドを使用してボリュームを明示的に作成することも、コンテナーの作成時にボリュームを作成することもできます。 [root@localhost ~]# docker ボリューム作成 nginx_volume ボリューム [root@localhost ボリューム]# docker で nginx_volume を検査する [ { 「作成日時」: 「2021-08-12T01:58:04-04:00」、 "ドライバー": "ローカル", 「ラベル」: {}, 「マウントポイント」: 「/var/lib/docker/volumes/nginx_volume/_data」、 "名前": "nginx_volume", 「オプション」: {}, 「スコープ」: 「ローカル」 } ] マウントポイントがdockerのルートディレクトリ/var/lib/docker/volumesにあることがわかります。 docker volume rm/prune を使用して、未使用のボリュームを 1 つまたはすべてクリアします。docker コマンドを使用してボリュームを管理できる点は、バインド マウントよりも優れています。 [root@localhost ~]# docker ボリューム ls ドライバーボリューム名 ローカルの owncloud-docker-server_files ローカル owncloud-docker-server_mysql ローカル owncloud-docker-server_redis [root@localhost ~]# docker ボリュームプルーニング 警告! これにより、少なくとも 1 つのコンテナーで使用されていないすべてのローカル ボリュームが削除されます。 本当に続行しますか? [y/N] y 削除されたボリューム: 独自のクラウドDockerサーバーファイル 独自のクラウドDockerサーバー_mysql 独自のクラウド-docker-server_redis 回収された合計容量: 199.4MB コンテナの作成時にコンテナマウントのソースが指定されていない場合、Docker は自動的に匿名ボリュームを作成します。このボリュームも Docker ルート ディレクトリに配置されます。 [root@localhost ボリューム]# docker run -dt -v /usr/share/nginx/html --name nginx_with_volume nginx d25bdfce9c7ac7bde5ae35067f6d9cf9f0cd2c9cbea6d1bbd7127b3949ef5ac6 [root@localhost ボリューム]# docker ボリューム ls ドライバーボリューム名 ローカル d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 ローカル nginx_volume [root@localhost ボリューム]# ls /var/lib/docker/volumes/ backingFsBlockDev d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 メタデータ.db nginx_volume マウントされたボリュームを作成すると、ストレージはバインドマウントと一致します。ただし、Docker ホストが特定のディレクトリまたはファイル構造を保証できない場合、ボリュームは Docker ホストの構成をコンテナ ランタイムから分離するのに役立ちます。このように、ある Docker ホストから別の Docker ホストにデータをバックアップ、復元、または移行する必要がある場合、ボリュームは非常に便利であり、ホスト パスの制限から解放されます。 バインド マウントおよびボリュームを使用する場合は、次の伝播オーバーレイの原則に注意する必要があります。 空のボリュームをマウントする場合: コンテナ内のディレクトリの内容がボリュームに伝播 (コピー) されます。 バインドマウントまたは空でないボリュームの場合: コンテナ内のディレクトリの内容は、ボリュームまたはバインドされたホスト ディレクトリによって上書きされます。 3.tmpfsマウントtmpfs マウントは Linux ホストでのみ使用可能です。tmpfs マウントを使用してコンテナを作成すると、コンテナはコンテナの書き込み可能レイヤーの外部にファイルを作成できます。データをメモリ内に保持し、コンテナが停止すると、書き込まれたデータも削除されます。主に、ホストまたはコンテナの書き込み可能レイヤーに残したくない機密ファイルの一時的な保存に使用されます。 --tmpfs オプションを使用してメモリ ブロックをマウントします。 docker run -dt --name busybox_tmpfs --tmpfs /etc/running busybox --mount メソッドを使用してパラメータを指定し、一時ストレージのサイズを指定します。 docker run -dt --name busybox_tmpfs2 --mount type=tmpfs,tmpfs-size=2048,destination=/etc/running busybox ストレージデータ共有コンテナ間でデータを共有するには、主に 2 つの方法があります。最初の方法は比較的単純で、ディレクトリまたはボリュームを複数のコンテナにマウントするだけです。ここでは詳細には触れません。中間コンテナを介して共有を実現する方法を見てみましょう。 バインドマウントされたディレクトリとボリュームを含む中間コンテナを作成します。 docker create -v /share:/volume1 -v /volume2 --name volume_share busybox 共有する必要があるコンテナでは、オプション --volumes-from を使用して取得できます。 docker run -d -t --volumes-from volume_share --name container1 busybox Mounts フィールドを調べてみましょう。この時点で、container1 はバインド ディレクトリとボリュームにマウントされています。 「マウント」: [ { 「タイプ」:「バインド」 「ソース」: 「/share」、 「宛先」: 「/volume1」、 "モード": "", 「RW」:真、 「伝播」: 「rprivate」 }, { 「タイプ」:「ボリューム」、 「名前」: 「21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e」、 「ソース」: 「/var/lib/docker/volumes/21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e/_data」、 「宛先」: 「/volume2」、 "ドライバー": "ローカル", "モード": "", 「RW」:真、 「伝播」: 「」 } ]、 Docker コンテナ ストレージについて学んだことは以上です。この短い記事が、必要なときに役立つことを願っています。 これで、docker コンテナのいくつかの保存方法についての記事は終了です。docker コンテナの保存の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: HTML リンク アンカー タグと SEO におけるその役割の概要
このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...
目次キューマイクロタスク非同期/待機メッセージチャネルやっと付録ここ二日間、「タイムリーな setT...
1. Nginx ステータス監視Nginx には、Nginx の全体的なアクセス ステータスを監視す...
1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...
robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...
目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...
目次ドラッグアンドドロップアップロードについては以前の記事で書きました。ファイルをアップロードするF...
はじめに: 最近、会社のプロジェクトでデータベースのバージョンが変更されました。ここでは、MySQL...
1. サーブレットとは何か1.1. 正式な言葉で説明する:サーブレットは、動的な Web リソースを...
目次Dockerコンテナのソースコードを使用してhttpdをデプロイし、ストレージボリュームを使用し...
今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...
前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...
WeakMap オブジェクトは、キーが弱参照であるキー/値のペアのコレクションです。キーはオブジェク...
XML/HTML コードコンテンツをクリップボードにコピー<ボタンスタイル= "カ...
今日は、ネイティブ JS で実装された画像マーキー効果を紹介します。効果は次のとおりです。 実装され...