コンテナデータボリュームとは データがコンテナ内にある場合、コンテナを削除するとデータは失われます。 例: MySQL コンテナが削除されました。これは、データベースを削除して逃げると呼ばれることがよくあります。 要件: データを永続化できます。コンテナがすぐに削除されても、データはコンテナ内に残ります。データ共有テクノロジを実現できます。 Docker コンテナによって生成されたデータはローカル コンピューターに同期されます。 これがロールテクニックです!ディレクトリをマウントし、コンテナのディレクトリを Linux にマウントします。 概要: ボリューム テクノロジは、データの永続性と同期操作を実現するために使用され、コンテナー間でデータを共有することもできます。 データボリュームの使用 方法1: コマンドを直接使用してマウントする -v # コマンド docker run -it -v ホストディレクトリ: コンテナディレクトリ -p ホストポート: コンテナポート # テスト # ホストのホームディレクトリは空です [root@bogon home] # ls # contes イメージを起動して、ホストのホームをコンテナのホーム [root@bogon home] にバインドします。# docker run -v /home:/home/ -it centos [root@8dc073caf39c /]# cd ホーム/ # コンテナのホームディレクトリは空です [root@8dc073caf39c home]# ls # コンテナディレクトリ [root@8dc073caf39c home] に test.java ファイルを作成します。# touch test.java [root@8dc073caf39c ホーム]# ls テスト # ホストのホームディレクトリに切り替えると、test.javaファイルが表示されました [root@8dc073caf39c home]# [root@bogon home]# ls テスト # ホストのホームディレクトリ [root@bogon home] に test2.java ファイルを作成します。# touch test2.java [root@bogon ホーム]# ls テスト2.java テスト.java [root@bogon ホーム]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 8dc073caf39c centos "/bin/bash" 3 分前 3 分前 focused_nobel # 実行中のコンテナに入る [root@bogon home]# docker exec -it 8dc073caf39c /bin/bash # コンテナのホームディレクトリに入る [root@8dc073caf39c /]# cd home/ # test2.java ファイルが見つかりました [root@8dc073caf39c home]# ls テスト.java テスト2.java # 検査コマンドでコンテナ情報を表示する [root@bogon home]# docker examine 8dc073caf39c 「マウント」: [ { 「タイプ」:「バインド」 "Source": "/home", # ホストディレクトリ "Destination": "/home", # コンテナディレクトリ "Mode": "", 「RW」:真、 「伝播」: 「rprivate」 } ]、 ## 結論: -v を使用してデータをバインドする場合# 1. コンテナが停止すると、ホストがデータに変更を加え、コンテナの起動後にデータが同期されます# 2. コンテナが削除されても、ホスト上のディレクトリ内のデータはそのまま残ります## 利点: データ ボリュームを使用した後、将来構成ファイルを変更するときは、ローカルで変更するだけで、コンテナは自動的に同期します MySQLをインストールする MySQL データの永続性の問題 # -e MYSQL_ROOT_PASSWORD=my-secret-pw 初期パスワードをmy-secret-pwに設定します # 公式コマンド: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # テスト # 解釈 # -d バックグラウンド実行 # -p 3306:3306 バインドポート # -v /home/mysql/conf:/etc/mysql/conf.d データボリュームマウントテクノロジ bind mysql 設定ファイル # -v /home/mysql/data:/var/lib/mysql データボリュームマウントテクノロジ bind mysql データ # -e MYSQL_ROOT_PASSWORD=123456 環境設定 ---》mysql の初期パスワードを 123456 に設定 # --name mysql0 コンテナにmysql01という名前を付けます [root@bogon home]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql 6d75b6312f725de2c71709116af5755604ea60cd073f1daf3755c578c1e64f57 名前付きマウントと匿名マウント #匿名マウント -v コンテナパス! docker run -d -P --name nginx01 -v /etc/nginx nginx # 名前付きマウント -v ボリューム名: コンテナ内のパス docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx # 匿名マウントをテストする [root@localhost test]# docker run -d -P --name nginx01 -v /etc/nginx nginx 214dab398d9997a730b970b6e3bb08fa7e39bbb0ca91ad59f6b3f235d8f1b9bc # すべてのボリュームを表示 [root@localhost test]# docker volume ls ドライバーボリューム名 local 2c22e1c50ff7330b815b692f8f71a1fca878209223846c95626f7efd9dc2a83b # 匿名マウント # 名前付きマウントをテスト # -v ボリューム名: コンテナー内のパス [root@localhost test] を使用 # docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx a678d79886565601bf466ff41734cb5334bdaf9e881b9cbf11edb84e9d790251 # すべてのボリュームを表示 [root@localhost test]# docker volume ls ドライバーボリューム名 local 2c22e1c50ff7330b815b692f8f71a1fca878209223846c95626f7efd9dc2a83b # 匿名マウント local juming-nginx # 名前付きマウント # データボリュームの情報を表示する # コマンド docker volume examine volume name # docker コンテナ内のすべてのボリュームは、指定されたディレクトリなしで /var/lib/docker/volumes/XXX/_data にあります [root@localhost test]# docker ボリューム検査 juming-nginx [ { 「作成日時」: 「2020-08-13T09:18:34+08:00」、 "ドライバー": "ローカル", 「ラベル」: null、 「マウントポイント」: 「/var/lib/docker/volumes/juming-nginx/_data」、 「名前」: 「juming-nginx」、 「オプション」: null、 「スコープ」: 「ローカル」 } ] # 名前付きマウントを使用すると、ボリュームの 1 つを簡単に見つけることができます。ほとんどの場合、名前付きマウントを使用します。# 名前付きマウント、匿名マウント、または指定されたパスのマウントであるかどうかを判断する方法! # -v コンテナ パス # 匿名マウント # -v ボリューム名: コンテナ パス # 名前付きマウント # -v ホスト パス: コンテナ パス # 指定パスによるマウント 拡大する # 読み取りおよび書き込み権限を -v ボリューム名: コンテナ内のパス: ro rw で変更します # ro--->読み取り専用 読み取り専用 # rw--->読み取り 書き込み 読み取りと書き込み docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx DockerFileを使い始める DockerFile は、Docker イメージをビルドするために使用されるビルド ファイルです。コマンドスクリプト! まずはお試しください! [root@localhost docker-test-volume]# cat dockerfile フォーム centos ボリューム ["volume01", "volume02"] CMD エコー "-----終了-----" コマンド /bin/bash # ビルド# コマンド docker build -f シェル スクリプト ファイル -t イメージ名: バージョン番号 [root@localhost docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t centos:1.0 . ビルドコンテキストを Docker デーモンに送信しています 2.048kB ステップ 1/4: Centos から ---> 0d120b6ccaa8 ステップ 2/4 : ボリューム ["volume01", "volume02"] ---> 4e6de7bc2f15 で実行中 中間コンテナ 4e6de7bc2f15 を削除しています ---> f9e48207902b ステップ 3/4: CMD echo "-----end-----" ---> b22adea363e5 で実行中 中間コンテナ b22adea363e5 を削除しています ---> a7518e2e1c72 ステップ 4/4 : CMD /bin/bash ---> ae1b746bef6b で実行中 中間コンテナ ae1b746bef6b を削除しています ---> d840628c30a9 正常に構築されました d840628c30a9 centos:1.0 のタグ付けに成功しました # イメージを表示 [root@localhost overlay2]# docker images リポジトリ タグ イメージ ID 作成 サイズ centos 1.0 d840628c30a9 12 分前 215MB # 独自のイメージ centos 最新 0d120b6ccaa8 2 日前 215MB # 生成したイメージを起動します [root@1af673cf9c88 /]# docker run -it d840628c30a9 /bin/bash [root@1af673cf9c88 /]# ls -l 合計 0 lrwxrwxrwx. 1 ルート ルート 7 5月 11 2019 bin -> usr/bin drwxr-xr-x. 5 ルート ルート 360 8月13日 02:18 dev drwxr-xr-x. 1 ルート ルート 66 8月 13 02:18 など drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 ホーム lrwxrwxrwx. 1 ルート ルート 7 2019年5月11日 lib -> usr/lib lrwxrwxrwx. 1 ルート ルート 9 2019年5月11日 lib64 -> usr/lib64 drwx------. 2 ルート ルート 6 8月 9 21:40 lost+found drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 メディア drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 mnt drwxr-xr-x. 2 ルート ルート 6 2019年5月11日 opt dr-xr-xr-x. 117 ルート ルート 0 8月13日 02:18 proc dr-xr-x---. 2 ルート ルート 162 8月 9日 21:40 ルート drwxr-xr-x. 11 ルート ルート 163 8月9日 21:40 実行 lrwxrwxrwx. 1 ルート ルート 8 2019年5月11日 sbin -> usr/sbin drwxr-xr-x. 2 ルート ルート 6 5月 11 2019 srv dr-xr-xr-x. 13 ルート ルート 0 8月11日 09:58 sys drwxrwxrwt. 7 ルート ルート 145 8月 9日 21:40 tmp drwxr-xr-x. 12 ルート ルート 144 8月 9日 21:40 usr drwxr-xr-x. 20 ルート ルート 262 8月 9日 21:40 var drwxr-xr-x. 2 root root 6 Aug 13 02:18 volume01 # これは、イメージ drwxr-xr-x. 2 root root 6 Aug 13 02:18 volume02 を生成するときに自動的にマウントされるデータ ボリューム ディレクトリです。 # このボリュームには外部のディレクトリと同期されたディレクトリが必要です。調べてみましょう # 1. コンテナIDに基づいてコンテナ情報を照会する --》データボリューム情報 # docker 検査 1af673cf9c88 # 2. データボリューム情報に従って、volume01 に対応するデータボリューム名を検索します # docker volume examine 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 # 3. データボリューム名に従ってデータボリューム情報を照会します--「Linux で対応するディレクトリを検索します # docker volume examine 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 # コンテナ内にファイルを作成します。データボリューム volume01 に test.java ファイルを作成します [root@1af673cf9c88 volume01]# touch test.java [root@1af673cf9c88 volume01]# ls テスト # コンテナを終了する [root@1af673cf9c88 volume01]# exit 出口 # コンテナ情報を表示する [root@localhost overlay2]# docker examine 1af673cf9c88 # マウントされたボリューム volume01 に対応する名前を検索します。つまり、8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 です。 「マウント」: [ { 「タイプ」:「ボリューム」、 「名前」: 「8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3」、 「ソース」: 「/var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data」、 「宛先」: 「volume01」、 "ドライバー": "ローカル", "モード": "", 「RW」:真、 「伝播」: 「」 }, { 「タイプ」:「ボリューム」、 「名前」: 「046d0baa3cc0bc3540c5e7248808358371641bfba4e0bbd139c99fe851751da2」、 「ソース」: 「/var/lib/docker/volumes/046d0baa3cc0bc3540c5e7248808358371641bfba4e0bbd139c99fe851751da2/_data」、 「宛先」: 「volume02」、 "ドライバー": "ローカル", "モード": "", 「RW」:真、 「伝播」: 「」 } ]、 # データボリューム名 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 に従って、Linux の場所 [root@localhost overlay2] でボリュームを見つけます。# docker volume examine 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 [ { 「作成日時」: 「2020-08-13T10:27:12+08:00」、 "ドライバー": "ローカル", 「ラベル」: null、 「マウントポイント」: 「/var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data」、 「名前」: 「8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3」、 「オプション」: null、 「スコープ」: 「ローカル」 } ] # /var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data/ ディレクトリにある test.java ファイルを見つけます [root@localhost volumes]# cd /var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data/ [root@localhost _data]# ls テスト データボリュームコンテナ 複数の MySQL データの同期! # コンテナ間でデータを共有するには、--volumes-from コンテナ名を使用します # docker01 という名前のイメージを起動します [root@localhost _data]# docker run -it --name docker01 centos:1.0 /bin/bash [root@a85fbed0ebc9 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # docker02 という名前の同じイメージを起動し、docker01 に関連付けます。この時点で、docker01 はデータ ボリューム コンテナーと呼ばれます [root@localhost _data]# docker run -it --name docker02 --volumes-from docker01 centos:1.0 [root@a89fb82eeeb5 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # コンテナ docker02 の volume01 ディレクトリに test.txt を作成します [root@a89fb82eeeb5 /]# cd volume01/ [root@a89fb82eeeb5 volume01]# ls [root@a89fb82eeeb5 volume01]# タッチテスト.txt [root@a89fb82eeeb5 volume01]# ls テスト.txt # コンテナ情報を表示 [root@a89fb82eeeb5 volume01]# [root@localhost _data]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 a89fb82eeeb5 centos:1.0 "/bin/sh -c /bin/bash" 約 1 分前 起動 約 1 分 docker02 a85fbed0ebc9 centos:1.0 "/bin/bash" 4 分前 4 分前 docker01 # docker01 という名前のコンテナに入る [root@localhost _data]# docker exec -it a85fbed0ebc9 /bin/bash [root@a85fbed0ebc9 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # コンテナのvolume01ディレクトリに入る [root@a85fbed0ebc9 /]# cd volume01/ # test.txt ファイルが見つかりました [root@a85fbed0ebc9 volume01]# ls テスト.txt # test01.txt を作成 [root@a85fbed0ebc9 volume01]# test01.txt をタッチします [root@a85fbed0ebc9 volume01]# ls テスト.txt テスト01.txt # docker02 という名前のコンテナに入る [root@localhost _data]# docker exec -it a89fb82eeeb5 /bin/bash [root@a89fb82eeeb5 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 [root@a89fb82eeeb5 /]# cd volume01/ # test01.txt ファイルが見つかりました [root@a89fb82eeeb5 volume01]# ls テスト.txt テスト01.txt # docker03 という名前の同じイメージを起動し、docker01 に関連付けます [root@localhost _data]# docker run -it --name docker03 --volumes-from docker01 centos:1.0 # volume01 ディレクトリに入り、test.txt test01.txt ファイルを見つけます [root@11d93f9bcd89 /]# cd volume01/ [root@11d93f9bcd89 volume01]# ls テスト.txt テスト01.txt #テストプロセス: 1. docker01 という名前の centos:1.0 イメージ コンテナを実行します。 # 2. docker02 という名前の centos:1.0 イメージ コンテナーを実行し、--volumes-from docker01 を介してデータを共有します。# 3. docker03 という名前の centos:1.0 イメージ コンテナーを実行し、--volumes-from docker01 を介してデータを共有します。# 4. docker04 という名前の centos:1.0 イメージ コンテナーを実行し、--volumes-from docker03 を介してデータを共有します。# 5. docker05 という名前の centos イメージ コンテナーを実行し、--volumes-from docker03 を介してデータを共有します。# テストの結果、次のことがわかりました。 # 1. 任意のコンテナの volume01 ディレクトリにファイルを追加すると、追加されたファイルはデータ共有のために他の 4 つのコンテナのディレクトリに表示されます。 # 2. docker01 という名前のコンテナを停止して削除すると、他の 4 つのコンテナの volume01 ディレクトリのファイルはそのまま残ります。 # 3. docker01 という名前のコンテナを停止して削除し、他の 4 つのコンテナのいずれかの volume01 ディレクトリにファイルを追加します。他の 3 つのコンテナもデータを共有します。 # 4. 各コンテナのデータ ボリュームの名前は異なりますが、Linux システム内の同じデータ ディレクトリに対応しています。つまり、各コンテナのデータ ボリューム ディレクトリは、Linux システム内の同じデータ ディレクトリを指します [root@localhost _data]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 78cd51a35c41 centos "/bin/bash" 17 分前 17 分前 trusting_tharp e6e0988c50cd centos "/bin/bash" 17 分前 17 分前 docker05 c5ebc03e6819 centos:1.0 "/bin/sh -c /bin/bash" 19 分前 19 分前 docker04 11d93f9bcd89 centos:1.0 "/bin/sh -c /bin/bash" 22 分前 22 分前 docker03 a89fb82eeeb5 centos:1.0 "/bin/sh -c /bin/bash" 31 分前 31 分前 docker02 [root@localhost _data]# docker examine e6e0988c50cd 「マウント」: [ { 「タイプ」:「ボリューム」、 「名前」: 「fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62」、 「ソース」: 「/var/lib/docker/volumes/fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62/_data」、 「宛先」: 「volume01」、 "ドライバー": "ローカル", "モード": "", 「RW」:真、 「伝播」: 「」 }, ] [root@localhost _data]# docker examine c5ebc03e6819 を実行します 「マウント」: [ { 「タイプ」:「ボリューム」、 「名前」: 「fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62」、 「ソース」: 「/var/lib/docker/volumes/fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62/_data」、 「宛先」: 「volume01」、 "ドライバー": "ローカル", "モード": "", 「RW」:真、 「伝播」: 「」 }, ] [root@localhost _data]# docker 検査 11d93f9bcd89 「マウント」: [ { 「タイプ」:「ボリューム」、 「名前」: 「fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62」、 「ソース」: 「/var/lib/docker/volumes/fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62/_data」、 「宛先」: 「volume01」、 "ドライバー": "ローカル", "モード": "", 「RW」:真、 「伝播」: 「」 }, ] データ共有を実現する複数のMySQL
結論は: 構成情報はコンテナ間で渡され、その場所を使用しているコンテナがなくなるまで、データ ボリューム コンテナのライフサイクルは継続されます。 ただし、ローカルに保存されると、ローカル データは削除されません。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: JDBC-idea で mysql をインポートして java jar パッケージに接続する (mac)
目次1. ルール 1: Object.Method() 1.1 ケース1 1.2 ケース2 1.3 ...
目次ディスク使用量の表示ディスク クリーンアップ (軽々しく使用しないでください)データの移行ディス...
ほとんどのナビゲーション バーは、下の図に示すように水平に配置されていますが、これはどのように実現さ...
目次導入ダウンロードしてインストールする設定docker-composeをインストールする導入Doc...
プロジェクト内のページの長さはおよそ2000px以上あり、背景画像にはテクスチャやグラデーションがあ...
目次1.vモデル2. プロパティとイベントのバインディング3. フォーム要素のバインディング3.1 ...
WeChatアプレットフォームの検証、参考までに具体的な内容は次のとおりです。プラグインWxVali...
MySQL のインストール時にいくつかの問題が発生しました。オンラインで見つけた回答は似たようなもの...
目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...
目次序文コンポーネントライブラリの作成主要な構成の変更ディレクトリレイアウトの調整ライブラリ構築のた...
目次1. リテラル1.1 数値リテラル1.2 浮動小数点リテラル1.3 特別な値1.4 文字列リテラ...
プロジェクトでは、データを操作するためにバッチ操作ステートメントが必要になることがよくあります。バッ...
MySQLは次のエラーを表示します「コントロール パネル -> 管理ツール -> サービ...
アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...
データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...