Dockerデータボリューム操作の実装

Dockerデータボリューム操作の実装

データボリュームの使用開始

先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、通常は Docker の copy コマンドを使用しますが、それでもパフォーマンスは少し劣ります。このコピーをローカル ディスクの I/O パフォーマンスに到達させる方法はないのでしょうか?持っている!

データ ボリュームはコピー システムをバイパスし、複数のコンテナー間またはコンテナーとホスト間でディレクトリやファイルを共有できます。データ ボリュームはコピー システムをバイパスし、ローカル ディスク I/O パフォーマンスを実現できます。

この記事では、まず簡単なケースを使用して、データ ボリュームの基本的な使用法を説明します。

上記で使用した nginx イメージを例にとると、コンテナを実行するときに、次のコマンドでデータ ボリュームを指定できます。

docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 bc26f1ed35cf

操作効果は以下のとおりです。

この時点で、データ ボリュームを作成し、コンテナの/usr/share/nginx/html/ディレクトリにマウントしました。ご存知のとおり、このディレクトリは実際には nginx が保存する html ディレクトリです。ここでデータ ボリュームをマウントすることで、ページを変更するにはローカル マッピングの場所を変更するだけで済みます。

次に、docker inspect コマンドを使用して、作成したコンテナの詳細を表示し、次のようにデータ ボリューム マッピング ディレクトリを見つけます。

ご覧のとおり、Docker はデフォルトでホストの/var/lib/docker/volumes/0746bdcfc045b237a6fe2288a3af9d7b80136cacb3e965db65a212627e217d75/_dataディレクトリをソース ディレクトリとして使用します。次に、次のようにディレクトリを入力します。

このとき、このディレクトリ配下のファイル内容は、コンテナ内の/usr/share/nginx/html/ディレクトリ配下のファイル内容と一致していることがわかります。これは、コンテナ内の空でないディレクトリに空のデータボリュームをマウントすると、このディレクトリ内のファイルがデータボリュームにコピーされるためです (コンテナ内のディレクトリに空でないデータボリュームをマウントすると、コンテナ内のディレクトリにデータボリューム内のデータが表示されます。元のコンテナ内のディレクトリにデータがある場合は、元のデータは非表示になります)。

ヒント:

Mac 上の Docker は少し特殊なため、Linux 環境であれば上記の /var/lib/xxxx ディレクトリに直接入ることができます。Mac の場合は、まず次のコマンドを実行して、新しく入力したコマンドラインで /var/lib/xxx ディレクトリに入る必要があります。

画面 ~/Library/Containers/com.docker.docker/Data/vms/0/tty

次に、ファイル内の index.html ファイルの内容を次のように変更します。

echo "hello volumes">index.html

変更が完了したら、ブラウザに戻り、http://localhost と入力して nginx の index.html ページのデータを表示し、変更されていることを確認します。これは、ホスト マシン内のファイルがコンテナーと共有されていることを示します。

ホストディレクトリと組み合わせる

上記のデータボリュームの使用は最適な解決策ではありません。一般的には、ホストマシン上のディレクトリをコンテナにマウントするように明示的に指定する必要があります。指定方法は次のとおりです。

docker run -itd --name nginx -v /Users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf

これにより、ホストの/Users/sang/blog/docker/docker/ディレクトリがコンテナの/usr/share/nginx/html/ディレクトリにマウントされます。次に、読者は/Users/sang/blog/docker/docker/ディレクトリに html ファイルを追加するか、html ファイルを変更するだけで、その効果は nginx アクセスですぐに確認できます。

この使用方法は、コンテナを再デプロイしたり再起動したりする必要がなく、開発やテストに非常に便利です。

注: ホストアドレスは絶対パスです

その他の操作

Dockerfile のデータボリューム

開発者が Dockerfile を使用してイメージをビルドする場合は、イメージをビルドするときにデータ ボリュームを宣言することもできます。次に例を示します。

nginxから
https://www.baidu.com/img/bd_logo1.png /usr/share/nginx/html/ を追加します。
実行 echo "hello docker volume!">/usr/share/nginx/html/index.html
ボリューム /usr/share/nginx/html/

このようにして匿名データボリュームが構成され、動作中は/usr/share/nginx/html/ディレクトリにデータが書き込まれるため、コンテナストレージ層でのステートレスな変更を実現できます。

すべてのデータボリュームを表示

すべてのデータ ボリュームを表示するには、次のコマンドを使用します。

docker ボリューム ls

図に示すように:

データ量の詳細を表示

次のようにボリューム名に応じてデータの詳細を表示できます。

docker ボリューム検査

実行結果は以下のとおりです。

データボリュームの削除

docker volume rmコマンドを使用してデータ ボリュームを削除することも、次のようにdocker volume pruneを使用してデータ ボリュームをバッチで削除することもできます。

バッチ削除中に、すべてのデータ ボリュームが削除されず、1 つが残りました。これは、データ ボリュームがまだ使用中であるためです。図に示すように、関連するコンテナーを停止して削除し、データ ボリュームを再度削除すると、正常に削除されます。

データボリュームコンテナ

データ ボリューム コンテナーは、データ ボリュームをマウントするために特別に使用されるコンテナーです。このコンテナーは主に他のコンテナーによって参照され、使用されます。いわゆるデータ ボリューム コンテナーは、実際には以下に示すように通常のコンテナーです。

  • データボリュームコンテナを作成する

次の方法を使用してデータ ボリューム コンテナーを作成します。

docker run -itd -v /usr/share/nginx/html/ --name mydata ubuntu

コマンド実行効果は次のとおりです。

  • 参照コンテナ

データ ボリューム コンテナーを参照するには、次のコマンドを使用します。

docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx
docker run -itd --volumes-from mydata -p 81:80 --name nginx2 nginx

この時点で、nginx1 と nginx2 は両方とも同じデータ ボリュームを/usr/share/nginx/html/ディレクトリにマウントします。3 つのコンテナのいずれかがディレクトリ内のファイルを変更すると、他の 2 つがその変更を確認できます。

この時点で、 docker inspectコマンドを使用してコンテナの詳細を表示し、3 つのコンテナのデータ ボリュームの説明が以下に示すように一貫していることを確認します。

要約する

この記事では主にデータボリューム内のコンテナ操作について紹介します。全体的に非常に簡単です。皆さん、理解できましたか?

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker データボリュームコンテナの作成と使用状況分析
  • Dockerコンテナのデータボリュームの詳細な説明
  • Dockerデータボリュームとコンテナオーケストレーションの使用
  • Docker データ管理 (データ ボリュームとデータ ボリューム コンテナー) の詳細な説明
  • 高度な Docker ボリューム
  • Dockerデータボリューム管理の詳細な説明
  • Docker データボリュームの一般的な操作コードの例

<<:  Javascript実践におけるコマンドモードの詳しい説明

>>:  mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

推薦する

Nginx でアクセス頻度、ダウンロード速度、同時接続数を制限する方法

1. アクセス頻度、同時接続、ダウンロード速度を制限するために使用されるモジュールと命令の概要ngx...

よく使うLinuxコマンドのまとめ

私は2年間運用保守に携わり、多くのコマンドを使用しました。特定のLinuxコマンドを習得すると、どれ...

mysql8.0.21 のダウンロードとインストールに関する詳細なチュートリアル

公式ウェブサイトアドレス: https://www.mysql.com/インストールの提案: インス...

vsftp を使用して Linux で FTP サーバーを構築する (パラメータの説明付き)

導入この章では、主に Linux で FTP サーバーを構築するプロセスを紹介します。習得すべき重要...

Win10 での MySQL 8.0 ログインでユーザー 'root'@'localhost' のアクセスが拒否される (パスワード使用: YES) 問題の解決方法

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...

Vueはデジタル千単位区切り形式をグローバルに実装します

この記事の例では、Vue がデジタル 3 桁区切り形式をグローバルに実装するための具体的なコードを参...

HTML Webページの例を使用してヘッドエリアコードの意味を説明する

例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的...

VMware 15.5 に CentOS7 をインストールするためのグラフィック チュートリアル

1. VMware 15.5で新しい仮想マシンを作成する1. VMware を開き、ホームページで「...

vsftpd ユーザーが ssh 経由でログインすることを禁止する方法

序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...

Vuex データの永続性を実装するためのアイデアとコード

vuexとはvuex: vue.js専用に開発された状態管理ツールで、すべてのコンポーネントの状態を...

ウェブタイポグラフィにおける致命的な意味的ミス 10 選

<br />これは、Steven D が書いた Web フロントエンド開発デザインの基本...

Webpack-cliが正常にインストールされたら、詳細についてはwebpack -vエラーケースを確認してください。

目次質問1. webpack webpack-cliをインストールする2. webpackのバージョ...

MySQL バッチ追加および保存メソッドの例

ストレステストにログインする際には、多くの異なるユーザーが必要となり、データベースに新しいデータを追...